basesrc: handle reference in set_allocation rather than in prepare_allocation
authorAurélien Zanelli <aurelien.zanelli@parrot.com>
Mon, 15 Sep 2014 14:38:17 +0000 (16:38 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 16 Sep 2014 07:17:28 +0000 (10:17 +0300)
Otherwise we can forget to unref objects in error cases.

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

libs/gst/base/gstbasesrc.c

index 921a848..071a109 100644 (file)
@@ -2965,6 +2965,11 @@ gst_base_src_set_allocation (GstBaseSrc * basesrc, GstBufferPool * pool,
   oldalloc = priv->allocator;
   priv->allocator = allocator;
 
+  if (priv->pool)
+    gst_object_ref (priv->pool);
+  if (priv->allocator)
+    gst_object_ref (priv->allocator);
+
   if (params)
     priv->params = *params;
   else
@@ -3141,6 +3146,11 @@ gst_base_src_prepare_allocation (GstBaseSrc * basesrc, GstCaps * caps)
 
   result = gst_base_src_set_allocation (basesrc, pool, allocator, &params);
 
+  if (allocator)
+    gst_object_unref (allocator);
+  if (pool)
+    gst_object_unref (pool);
+
   gst_query_unref (query);
 
   return result;