[vlc-devel] [RFC PATCH 0/5] decoder deadlo
thomas at gllm.fr
Fri Nov 6 14:48:42 CET 2015
There are some old and new deadlock in decoder.c:
- Deadlock when stopping a paused video (systematic on Desktop, OK on Android).
- Deadlock when seeking a paused video (systematic)
1/ Fix stop when paused, it's quite obvious.
2/ frames_countdown is only decremented for Video (from DecoderPlayVideo).
Therefore, it should be incremented only for Video too ?
3/ Display one frame when flushing by incrementing frames_countdown.
4/ Deadlock easy to understand but the fix is tricky. Ideally the Decoder
thread should unblock if (!p_owner->paused || p_owner->flushing), but these
variables are not protected by the same lock/cond. That's why I decided to add
a new variable: b_pause_after_flush.
5/ Really not sure about this one, I don't understand why input_DecoderWait
waits for p_owner->b_idle and not for p_owner->b_first.
Thomas Guillem (5):
decoder: fix deadlock when deleting a paused decoder
decoder: frames_countdown is only for Video
decoder: display one frame on flush
decoder: fix deadlock when flushing paused
decoder: don't wait if paused
src/input/decoder.c | 51 +++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 45 insertions(+), 6 deletions(-)
More information about the vlc-devel