gstreamer/gst/playback
Vincent Penquerc'h 9036dc8594 decodebin: possible fix for deadlock when spamming "next song"
There was a deadlock between a thread changing decodebin/demuxer
state from PAUSED to READY, and another thread pushing data
when starting.

From the stack trace at
https://bug741355.bugzilla-attachments.gnome.org/attachment.cgi?id=292471,
I deduce the following is happening, though I did not reproduce the
problem so I'm not sure this patch fixes it.

The streaming thread (thread 2 in that stack trace) takes the demuxer's
sink pad's stream lock in gst_ogg_demux_perform_seek_pull and will
activate a new chain. This ends up causing the expose lock being taken
in _pad_added_cb in decodebin.

Meanwhile, a state changed is triggered on thread 1, which takes the
expose lock in decodebin in gst_decode_bin_change_state, then frees
the previous chain, which ends up calling gst_pad_stop_task on the
demuxer's task, which in turn takes the demuxer's sink pad's stream
lock, deadlocking as both threads are now waiting for each other.

https://bugzilla.gnome.org/show_bug.cgi?id=741355
2015-02-19 13:38:29 +00:00
..
.gitignore
gstdecodebin2.c decodebin: possible fix for deadlock when spamming "next song" 2015-02-19 13:38:29 +00:00
gstplay-enum.c playbin: add nick for soft colorbalance play flag to fix gst-inspect 2014-04-27 00:26:14 +01:00
gstplay-enum.h
gstplayback.c streamsynchronizer: Make the element public 2012-11-21 10:29:44 +01:00
gstplayback.h
gstplaybin2.c playbin: improve debug log 2015-02-11 22:16:53 -08:00
gstplaysink.c Don't compare booleans for equality to TRUE and FALSE 2014-12-01 09:51:12 +01:00
gstplaysink.h playback: Add video-/audio-filter properties 2014-03-16 18:38:29 +01:00
gstplaysinkaudioconvert.c
gstplaysinkaudioconvert.h
gstplaysinkconvertbin.c playsinkconvertbin: setcaps() always returns TRUE and the return value is unused 2014-08-28 17:13:05 +03:00
gstplaysinkconvertbin.h
gstplaysinkvideoconvert.c
gstplaysinkvideoconvert.h
gstrawcaps.h
gststreamsynchronizer.c streamsynchronizer: Use the same waiting function for EOS and stream switches 2015-02-16 14:34:35 +02:00
gststreamsynchronizer.h streamsynchronizer: Send GAP event to finish preroll when change state from PLAYING to PAUSED 2015-02-16 14:09:43 +02:00
gstsubtitleoverlay.c Don't compare booleans for equality to TRUE and FALSE 2014-12-01 09:51:12 +01:00
gstsubtitleoverlay.h
gsturidecodebin.c uridecodebin: Reset the default query return value when the iterator has to resync 2015-02-19 01:30:05 +02:00
Makefile.am