]> git.0d.be Git - empathy.git/commitdiff
audio-sink: fix GstPad leaks
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Fri, 24 Feb 2012 13:55:04 +0000 (14:55 +0100)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 27 Feb 2012 07:46:44 +0000 (08:46 +0100)
gst_ghost_pad_new() doesn't take ownership of the target pad so we have to
unref it ourself.

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

src/empathy-audio-sink.c

index fbffa4885900467759a12067d534599ea99bea43..b4680a0fb824545451c6e296478ca46f55fa6a2d 100644 (file)
@@ -301,7 +301,7 @@ empathy_audio_sink_request_new_pad (GstElement *element,
   EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (element);
   GstElement *bin, *resample, *audioconvert0, *audioconvert1;
   GstPad *pad = NULL;
-  GstPad *subpad, *filterpad;
+  GstPad *subpad = NULL, *filterpad;
 
   bin = gst_bin_new (NULL);
 
@@ -355,6 +355,8 @@ empathy_audio_sink_request_new_pad (GstElement *element,
     goto error;
 
   subpad = gst_ghost_pad_new ("sink", filterpad);
+  gst_object_unref (filterpad);
+
   if (!gst_element_add_pad (GST_ELEMENT (bin), subpad))
     goto error;
 
@@ -362,6 +364,7 @@ empathy_audio_sink_request_new_pad (GstElement *element,
 
   pad = gst_ghost_pad_new (name, subpad);
   g_assert (pad != NULL);
+  gst_object_unref (subpad);
 
   if (!gst_element_sync_state_with_parent (bin))
     goto error;
@@ -380,6 +383,8 @@ error:
       gst_object_unref (pad);
     }
 
+  tp_clear_pointer (&subpad, gst_object_unref);
+
   gst_object_unref (bin);
   g_warning ("Failed to create output subpipeline");
   return NULL;