[vlc-devel] [PATCH] coreaudio: fix deadlock on interruption
Thomas Guillem
thomas at gllm.fr
Tue Dec 12 16:18:15 CET 2017
Hi,
I already merged it because the code was good for me. I could have wait
a little longer, but this issue was blocking a vlc-ios release.
On Tue, Dec 12, 2017, at 15:38, RĂ©mi Denis-Courmont wrote:
> Hi,
>
> Pause means to retain buffers but hold playback. Flush means to discard
> buffers buy keep playing. So checking pause within Flush is almost
> certainly wrong; these things should be orthogonal.
I tried to fix what you said with this patch
https://gist.github.com/tguillem/1052ee54937b4bdd24eae666ea271b6b
- b_paused is now only set from the vlc aout thread and read by the
audio render callback
- b_alive is only set by the interruption callback and read by vlc aout
flush/play.
The behavior will be almost identical. For me this is just a question of
personal taste but I agree this can make the code more understandable
(even if it adds more code).
>
> Also mixing atomic ops and muteces smells very bad, TBH.
I said to Caro to do it like that. I agree it smells bad and seems
complicated.
I invite you to take a closer at ca_Flush (in the drain == false case)
and ca_SetAliveState(). For me, it's thread safe.
This part of code is uber complicated, maybe by my fault, but Apple
specify that the audio render callback should be wait-less. That's why
we don't use the classical and easy to use mutex/cond duo.
> --
> Remi Denis-Courmont
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list