flowcombiner: keep a ref to the pads we're using
authorTim-Philipp Müller <tim@centricular.com>
Sat, 14 Jun 2014 10:31:44 +0000 (11:31 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 14 Jun 2014 10:32:42 +0000 (11:32 +0100)
Needed for use via the boxed type.

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

libs/gst/base/gstflowcombiner.c

index 7eaa63f..028f6e0 100644 (file)
@@ -129,7 +129,11 @@ gst_flow_combiner_unref (GstFlowCombiner * combiner)
   g_return_if_fail (combiner->ref_count > 0);
 
   if (g_atomic_int_dec_and_test (&combiner->ref_count)) {
-    g_queue_clear (&combiner->pads);
+    GstPad *pad;
+
+    while ((pad = g_queue_pop_head (&combiner->pads)))
+      gst_object_unref (pad);
+
     g_slice_free (GstFlowCombiner, combiner);
   }
 }
@@ -219,7 +223,7 @@ gst_flow_combiner_add_pad (GstFlowCombiner * combiner, GstPad * pad)
   g_return_if_fail (combiner != NULL);
   g_return_if_fail (pad != NULL);
 
-  g_queue_push_head (&combiner->pads, pad);
+  g_queue_push_head (&combiner->pads, gst_object_ref (pad));
 }
 
 /**
@@ -237,5 +241,6 @@ gst_flow_combiner_remove_pad (GstFlowCombiner * combiner, GstPad * pad)
   g_return_if_fail (combiner != NULL);
   g_return_if_fail (pad != NULL);
 
-  g_queue_remove (&combiner->pads, pad);
+  if (g_queue_remove (&combiner->pads, pad))
+    gst_object_unref (pad);
 }