From 2482a536ac0cfb1f298ecad5afffce2a1422b4b6 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Fri, 15 Jan 2010 19:52:29 +0100 Subject: [PATCH] decodebin2: sprinkle some more locking ... to avoid races and ensure some data structure consistency. See also #574289. --- gst/playback/gstdecodebin2.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c index 470ddc4b6f..d85d7b71c5 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; }