[gst-cvs] gst-openmax: base_filter: fix race condition when shutting down
Felipe Contreras
felipec at kemper.freedesktop.org
Sat Sep 19 09:21:16 PDT 2009
Module: gst-openmax
Branch: master
Commit: 6888b2bd80eff39e23ccc0aa36c72f1220232d47
URL: http://cgit.freedesktop.org/gstreamer/gst-openmax/commit/?id=6888b2bd80eff39e23ccc0aa36c72f1220232d47
Author: Mark Nauwelaerts <mark.nauwelaerts at collabora.co.uk>
Date: Tue May 19 16:26:00 2009 +0200
base_filter: fix race condition when shutting down
.. between starting streaming thread and mainloop.
Signed-off-by: Mark Nauwelaerts <mark.nauwelaerts at collabora.co.uk>
Signed-off-by: Felipe Contreras <felipe.contreras at gmail.com>
---
omx/gstomx_base_filter.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c
index e547013..e6bcbf7 100644
--- a/omx/gstomx_base_filter.c
+++ b/omx/gstomx_base_filter.c
@@ -300,6 +300,10 @@ output_loop (gpointer data)
GST_LOG_OBJECT (self, "begin");
+ /* do not bother if we have been setup to bail out */
+ if ((ret = g_atomic_int_get (&self->last_pad_push_return)) != GST_FLOW_OK)
+ goto leave;
+
if (!self->ready)
{
g_error ("not ready");
@@ -823,7 +827,8 @@ activate_push (GstPad *pad,
if (active)
{
GST_DEBUG_OBJECT (self, "activate");
- self->last_pad_push_return = GST_FLOW_OK;
+ /* task may carry on */
+ g_atomic_int_set (&self->last_pad_push_return, GST_FLOW_OK);
/* we do not start the task yet if the pad is not connected */
if (gst_pad_is_linked (pad))
@@ -842,6 +847,9 @@ activate_push (GstPad *pad,
{
GST_DEBUG_OBJECT (self, "deactivate");
+ /* persuade task to bail out */
+ g_atomic_int_set (&self->last_pad_push_return, GST_FLOW_WRONG_STATE);
+
if (self->ready)
{
/** @todo disable this until we properly reinitialize the buffers. */
More information about the Gstreamer-commits
mailing list