[PATCH][RFC] tee: hold private mutex in handle_data

Tim Müller tim at centricular.com
Wed Jan 1 04:52:52 PST 2014


On Wed, 2014-01-01 at 14:25 +0200, Andrey Utkin wrote:

Hi Andrey,

please could you put all of this into bugzilla? Thanks!

Cheers
 -Tim

> After looking at above (see "tee: needs fixing locking in gsttee.c?"), i've
> made such a patch and now i am running with it.
> It allows me to release requestpad safely from main thread.
> But if i release it from BLOCK probe callback, the callback is called from
> within handle_data() and hangs on secondary GST_TEE_DYN_LOCK, obviously because
> it is not recursive. Could we afford recursive mutex?
> 
> Before this patch, GST_TEE_DYN_LOCK was used only in release_pad(), which does
> not make sense.
> ---8<---
> 
> ---
>  plugins/elements/gsttee.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/plugins/elements/gsttee.c b/plugins/elements/gsttee.c
> index a6d4b9d..03eaaa2 100644
> --- a/plugins/elements/gsttee.c
> +++ b/plugins/elements/gsttee.c
> @@ -580,6 +580,7 @@ gst_tee_handle_data (GstTee * tee, gpointer data, gboolean is_list)
>    if (G_UNLIKELY (!tee->silent))
>      gst_tee_do_message (tee, tee->sinkpad, data, is_list);
>  
> +  GST_TEE_DYN_LOCK (tee);
>    GST_OBJECT_LOCK (tee);
>    pads = GST_ELEMENT_CAST (tee)->srcpads;
>  
> @@ -600,6 +601,7 @@ gst_tee_handle_data (GstTee * tee, gpointer data, gboolean is_list)
>      } else {
>        ret = gst_pad_push (pad, GST_BUFFER_CAST (data));
>      }
> +    GST_TEE_DYN_UNLOCK (tee);
>      return ret;
>    }
>  
> @@ -664,6 +666,7 @@ restart:
>      pads = g_list_next (pads);
>    }
>    GST_OBJECT_UNLOCK (tee);
> +  GST_TEE_DYN_UNLOCK (tee);
>  
>    gst_mini_object_unref (GST_MINI_OBJECT_CAST (data));
>  
> @@ -681,6 +684,7 @@ error:
>    {
>      GST_DEBUG_OBJECT (tee, "received error %s", gst_flow_get_name (ret));
>      GST_OBJECT_UNLOCK (tee);
> +    GST_TEE_DYN_UNLOCK (tee);
>      gst_mini_object_unref (GST_MINI_OBJECT_CAST (data));
>      return ret;
>    }

-- 
Tim Müller, Centricular Ltd - http://www.centricular.com



More information about the gstreamer-devel mailing list