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 playsink: remove old marshal remains 2012-07-13 12:35:44 +02:00
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 playback: Add video-/audio-filter properties 2014-03-16 18:38:29 +01:00
gstplayback.c streamsynchronizer: Make the element public 2012-11-21 10:29:44 +01:00
gstplayback.h Fix FSF address 2012-11-03 23:05:09 +00:00
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 Fix FSF address 2012-11-03 23:05:09 +00:00
gstplaysinkaudioconvert.h Fix FSF address 2012-11-03 23:05:09 +00:00
gstplaysinkconvertbin.c playsinkconvertbin: setcaps() always returns TRUE and the return value is unused 2014-08-28 17:13:05 +03:00
gstplaysinkconvertbin.h playsinkconvertbin: Remove obsolete segment tracking 2013-07-23 13:36:09 +02:00
gstplaysinkvideoconvert.c Fix FSF address 2012-11-03 23:05:09 +00:00
gstplaysinkvideoconvert.h Fix FSF address 2012-11-03 23:05:09 +00:00
gstrawcaps.h playback: add ANY caps features to default audio/video raw caps 2013-12-30 11:25:49 +01:00
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 subtitleoverlay: Remove some more unneeded segment tracking 2013-07-23 13:41:55 +02:00
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 gst: Add better support for static plugins 2013-04-15 15:52:58 +02:00