On 10/02/2017 04:25 PM, Giulio Moro wrote:
>> libcobalt enforces the requirement to hold the lock so that optimizing
>> the wake up process is possible - under the assumption that the caller
>> owns the lock. There is no hack around this.
> 
> Then I would suggest that pthread_cond_signal() should return an error code 
> if the caller does not own the mutex. Currently it returns 0 (success), which 
> is pretty confusing. I am happy to help bringing the documentation up to date 
> once this is done.

I don't think so. Success here means nobody owns the mutex, including
the caller; you could have another thread owning that mutex, preventing
libcobalt to take the fast path (by returning 0 immediately).

At any rate, if the application does not care for serializing accesses
to condvars, accepting a fundamentally racy behavior, the kernel is
entitled to tell such app that everything was fine.

> 
> Am I right to say that the waiting thread will only be unblocked after the 
> lock has been released from the calling thread, thus avoiding a potential 
> deadlock situation?
> 

I don't see any deadlock situation in that case, but yes, libcobalt only
resumes a convar waiter when the lock covering it is released, to
prevent a double context switch, would the waiter had a higher priority
than the thread signaling the condvar.

-- 
Philippe.

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

Reply via email to