From c8ecd6e9ebc6529d1cabc60d75bb30c392b2a82d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 17 Mar 2011 14:21:17 +0100 Subject: [PATCH] inputselector: Hold the selector lock while reading properties of the active pad --- plugins/elements/gstinputselector.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c index dbb3b22..0995e67 100644 --- a/plugins/elements/gstinputselector.c +++ b/plugins/elements/gstinputselector.c @@ -560,12 +560,14 @@ done: /* ERRORS */ not_active: { + gboolean active_pad_pushed = GST_SELECTOR_PAD_CAST (active_sinkpad)->pushed; + GST_INPUT_SELECTOR_UNLOCK (sel); /* unselected pad, perform fallback alloc or return unlinked when * asked */ GST_OBJECT_LOCK (selpad); - if (selpad->always_ok || !GST_SELECTOR_PAD_CAST (active_sinkpad)->pushed) { + if (selpad->always_ok || !active_pad_pushed) { GST_DEBUG_OBJECT (pad, "Not selected, performing fallback allocation"); *buf = NULL; result = GST_FLOW_OK; @@ -707,6 +709,8 @@ done: /* dropped buffers */ ignore: { + gboolean active_pad_pushed = GST_SELECTOR_PAD_CAST (active_sinkpad)->pushed; + GST_DEBUG_OBJECT (pad, "Pad not active, discard buffer %p", buf); /* when we drop a buffer, we're creating a discont on this pad */ selpad->discont = TRUE; @@ -715,7 +719,7 @@ ignore: /* figure out what to return upstream */ GST_OBJECT_LOCK (selpad); - if (selpad->always_ok || !GST_SELECTOR_PAD_CAST (active_sinkpad)->pushed) + if (selpad->always_ok || !active_pad_pushed) res = GST_FLOW_OK; else res = GST_FLOW_NOT_LINKED; -- 2.7.4