On 01/22/2013 12:34 PM, Philippe Gerum wrote:

> On 01/22/2013 12:09 PM, alex alex wrote:
>> 2013/1/22 Philippe Gerum <r...@xenomai.org>
>>
>>> On 01/22/2013 10:41 AM, alex alex wrote:
>>>
>>>> Hi,
>>>>
>>>> In the attached test program I test the scheduler lock operation with
>>>> pthread_set_mode_np and the PTHREAD_LOCK_SCHED bit mask.
>>>>
>>>> Description:
>>>> Two tasks are created.
>>>> t1 lock the scheduler then load the cpu, sleep then load the cpu again but
>>>> t2 task start when t1 sleep while the scheduler is locked. Why t1 is
>>>> preempted?
>>>>
>>>
>>> Think of what would happen would a blocked task be allowed to keep the
>>> scheduler lock.
>>>
>>>
>>>>
>> According to the documentation :
>> "PTHREAD_LOCK_SCHED when set, locks the scheduler, which prevents the
>> current thread from being switched out by the scheduler until the scheduler
>> is unlocked"
>> This is what t1 do, locking the scheduler then unlocked it.
>> t1 shouldn't be switched out until the scheduler be unlocked.
> 
> No. If t1 suspends willingly, then Xenomai drops the lock implicitly. 
> The scheduler lock is not just yet another lock, it protects the CPU as 
> a resource: this is a big massive traffic light preventing the RTOS to 
> do its basic job: i.e. task scheduling.
> 
> The documentation states that no other thread will __preempt__ the 
> __running__ thread holding the lock, not that a thread holding the lock 
> will keep it when it decides to drop the CPU resource, in which case 
> owning the lock is totally meaningless.
> 
> Functionally speaking, this situation is a gray area: there is no 
> recommended behavior simply because the situation (i.e. going to sleep 
> while holding the schedlock) is broken. So the RTOS has two options when 
> the application does this:
> 
> - assume this behavior is a bug, don't even try to neither detect nor 
> handle the situation, and let the user figure out why this is wrong (ask 
> vrtx32 or VxWorks users how fun it is).
> 
> - albeit locking the scheduler without having all the resources at hand 
> is generally a bad idea, assume the caller might really have a good 
> reason to call a blocking service, dropping the lock while this happens, 
> and reacquire it automatically when it wakes up.
> 
> #2 is current for Xenomai , because we tend to think people know what 
> they are doing with a real-time API.


At some point in time Xenomai used to panic when this happened. I seem
to remember the change was made in relation to the VxWorks emulator.


-- 
                                                                Gilles.

_______________________________________________
Xenomai mailing list
Xenomai@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to