gstreamer/gst/playback
Vincent Penquerc'h a2ee84fa80 decodebin: fix deadlock between downward state change and pad addition
If caps on a newly added pad are NULL, analyze_new_pad will try to
acquire the chain lock to add a probe to the pad so the chain can
be built later. This comes from the streaming thread, in response
to headers or other buffers causing this pad to be added, so the
stream lock is taken.

Meanwhile, another thread might be destroying the chain from a
downward state change. This will cause the chain to be freed with
the chain lock taken, and some elements are set to NULL here, which
can include the parser. This causes pad deactivation, which tries
to take the element's pad's stream lock, deadlocking.

Fix this by keeping track of which elements need setting to NULL,
and only do this after the chain lock is released. Only the chain
manipulation needs to be locked, not the elements' state changes.

https://bugzilla.gnome.org/show_bug.cgi?id=741355
2015-02-19 13:38:35 +00:00
..
.gitignore playsink: remove old marshal remains 2012-07-13 12:35:44 +02:00
gstdecodebin2.c decodebin: fix deadlock between downward state change and pad addition 2015-02-19 13:38:35 +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