[vlc-devel] [vlc-commits] auhal: implement drain

David Fuhrmann david.fuhrmann at gmail.com
Tue Mar 26 21:58:25 CET 2013

Am 26.03.2013 um 19:49 schrieb Rémi Denis-Courmont <remi at remlab.net>:

> Le mardi 26 mars 2013 20:06:12, David Fuhrmann a écrit :
>> If I parsed the relevant parts of your emails in the right way, I assume
>> that you want to complain that I did not extended the scope of the mutex
>> lock to the manipulation of the buffer.
> I wouldn't put it exactly like that, but roughly yes for short.
>> Please note that I already thought in doing so, before committing.
>> But the CircularBuffer already has some thread safety mechanisms using
>> atomic operations.
> That is irrelevant. It's good that CircularBuffer has thread-safety within 
> itself. But that does not cover the predicate of the condition variable.

It covers the fill state of the buffer. And I am assume that loading a 32 bit integer from RAM can be also considered as atomic (at least in the sense that the result is not inconsistent).
This is why I thought that if we use this result (stored into in another variable), it will be ok?

>> For this scenario I assumed that these will suffice for
>> proper thread synchronization.
> Locking the mutex makes no sense if you don't change state. You could remove 
> the locking and unlocking calls to the same effect.
> Then it would be obvious that scheduling predictability was missing. Hence I 
> strongly suspect that waiting can still deadlock with unfortunate timings.
> In particular, I do not see what synchronization directive prevents the render 
> thread from signalling the condition variable in the short time window after 
> the audio thread checks the buffer tial but before it starts waiting in the 
> condition.

But If I understand right, this is *exactly* the scenario where a mutex lock around vlc_cond_signal makes sense!?
In this short time you are mentioning (between getting the size of the buffer and calling vlc_cond_wait again on the thread which calls flush) the mutex is locked.
Therefore, vlc_cond_signal cannot be called by the coreaudio thread.

More information about the vlc-devel mailing list