summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2010-01-15 19:52:29 +0100
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2010-01-16 18:48:00 +0100
commit2482a536ac0cfb1f298ecad5afffce2a1422b4b6 (patch)
treec99a303194570edba6a1a75888454352e42328b8
parent45447337ad7189ade81226064b36eff172673c79 (diff)
decodebin2: sprinkle some more locking
... to avoid races and ensure some data structure consistency. See also #574289.
-rw-r--r--gst/playback/gstdecodebin2.c6
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;
}