basetransform: Avoid increasing query reference
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 21 Jul 2015 17:14:59 +0000 (13:14 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Wed, 22 Jul 2015 17:29:35 +0000 (13:29 -0400)
gst_query_find_allocation_meta() requires the query to be
writable to work. This patch ensure avoids taking a reference
on the query, so we can now check if a certain allocation meta
is present.

https://bugzilla.gnome.org/show_bug.cgi?id=752661

libs/gst/base/gstbasetransform.c

index 2177344..ecf5345 100644 (file)
@@ -1503,8 +1503,10 @@ gst_base_transform_default_query (GstBaseTransform * trans,
         GST_OBJECT_UNLOCK (trans);
         goto done;
       }
-      if ((decide_query = trans->priv->query))
-        gst_query_ref (decide_query);
+
+      decide_query = trans->priv->query;
+      trans->priv->query = NULL;
+
       GST_OBJECT_UNLOCK (trans);
 
       GST_DEBUG_OBJECT (trans,
@@ -1517,8 +1519,16 @@ gst_base_transform_default_query (GstBaseTransform * trans,
       else
         ret = FALSE;
 
-      if (decide_query)
-        gst_query_unref (decide_query);
+      if (decide_query) {
+        GST_OBJECT_LOCK (trans);
+
+        if (trans->priv->query == NULL)
+          trans->priv->query = decide_query;
+        else
+          gst_query_unref (decide_query);
+
+        GST_OBJECT_UNLOCK (trans);
+      }
 
       GST_DEBUG_OBJECT (trans, "ALLOCATION ret %d, %" GST_PTR_FORMAT, ret,
           query);