basetransform: Fix refcount leak
authorJan Schmidt <thaytan@noraisin.net>
Thu, 27 Oct 2011 12:08:14 +0000 (23:08 +1100)
committerJan Schmidt <thaytan@noraisin.net>
Thu, 27 Oct 2011 12:08:14 +0000 (23:08 +1100)
Don't leak peercaps and a ref to the basetransform when returning
the cached caps.

libs/gst/base/gstbasetransform.c

index 7561948ab5d817e5ff66ca60e10ba2fe09365d70..3c51d4b393bf2284e817106bb60aeb25af24072a 100644 (file)
@@ -722,8 +722,7 @@ gst_base_transform_getcaps (GstPad * pad)
     }
   } else {
     caps = gst_caps_ref (trans->priv->cached_transformed_caps[cache_index]);
-    GST_OBJECT_UNLOCK (trans);
-    return caps;
+    goto done;
   }
   GST_OBJECT_UNLOCK (trans);
 
@@ -747,7 +746,7 @@ gst_base_transform_getcaps (GstPad * pad)
   GST_DEBUG_OBJECT (pad, "transformed  %" GST_PTR_FORMAT, caps);
   gst_caps_unref (temp);
   if (caps == NULL)
-    goto done;
+    goto done_update_cache;
 
   /* and filter against the template of this pad */
   templ = gst_pad_get_pad_template_caps (pad);
@@ -769,7 +768,7 @@ gst_base_transform_getcaps (GstPad * pad)
     }
   }
 
-done:
+done_update_cache:
   GST_DEBUG_OBJECT (trans, "returning  %" GST_PTR_FORMAT, caps);
 
   GST_OBJECT_LOCK (trans);
@@ -779,6 +778,8 @@ done:
   if (caps) {
     trans->priv->cached_transformed_caps[cache_index] = gst_caps_ref (caps);
   }
+
+done:
   GST_OBJECT_UNLOCK (trans);
 
   if (peercaps)