diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2010-01-15 19:52:29 +0100 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2010-01-16 18:48:00 +0100 |
commit | 2482a536ac0cfb1f298ecad5afffce2a1422b4b6 (patch) | |
tree | c99a303194570edba6a1a75888454352e42328b8 | |
parent | 45447337ad7189ade81226064b36eff172673c79 (diff) |
decodebin2: sprinkle some more locking
... to avoid races and ensure some data structure consistency.
See also #574289.
-rw-r--r-- | gst/playback/gstdecodebin2.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c index 470ddc4b6..d85d7b71c 100644 --- a/gst/playback/gstdecodebin2.c +++ b/gst/playback/gstdecodebin2.c @@ -1897,17 +1897,19 @@ no_more_pads_cb (GstElement * element, GstDecodeChain * chain) GST_LOG_OBJECT (element, "got no more pads"); + CHAIN_MUTEX_LOCK (chain); if (!chain->elements || (GstElement *) chain->elements->data != element) { GST_LOG_OBJECT (chain->dbin, "no-more-pads from old chain element '%s'", GST_OBJECT_NAME (element)); + CHAIN_MUTEX_UNLOCK (chain); return; } else if (!chain->demuxer) { GST_LOG_OBJECT (chain->dbin, "no-more-pads from a non-demuxer element '%s'", GST_OBJECT_NAME (element)); + CHAIN_MUTEX_UNLOCK (chain); return; } - CHAIN_MUTEX_LOCK (chain); /* when we received no_more_pads, we can complete the pads of the chain */ if (!chain->next_groups && chain->active_group) { group = chain->active_group; @@ -2548,6 +2550,7 @@ gst_decode_chain_is_complete (GstDecodeChain * chain) { gboolean complete = FALSE; + CHAIN_MUTEX_LOCK (chain); if (chain->deadend) { complete = TRUE; goto out; @@ -2567,6 +2570,7 @@ gst_decode_chain_is_complete (GstDecodeChain * chain) } out: + CHAIN_MUTEX_UNLOCK (chain); GST_DEBUG_OBJECT (chain->dbin, "Chain %p is complete: %d", chain, complete); return complete; } |