# HG changeset patch # User Mike Ruprecht # Date 1249637133 0 # Node ID 1c58b9d2429be22355f66d9376e9cb6f8a6f9a75 # Parent 5058cdd46464e1411d48924c3adfec6fe82c1962 Unleak pad if more pads are linked. diff -r 5058cdd46464 -r 1c58b9d2429b libpurple/mediamanager.c --- a/libpurple/mediamanager.c Fri Aug 07 08:36:12 2009 +0000 +++ b/libpurple/mediamanager.c Fri Aug 07 09:25:33 2009 +0000 @@ -399,15 +399,19 @@ GstElement *parent = GST_ELEMENT_PARENT(pad); GstIterator *iter; GstPad *remaining_pad; + GstIteratorResult result; gst_element_release_request_pad(GST_ELEMENT_PARENT(pad), pad); - iter = gst_element_iterate_pads(parent); + iter = gst_element_iterate_src_pads(parent); - if (gst_iterator_next(iter, (gpointer)&remaining_pad) - == GST_ITERATOR_DONE) { + result = gst_iterator_next(iter, (gpointer)&remaining_pad); + + if (result == GST_ITERATOR_DONE) { gst_element_set_locked_state(parent, TRUE); gst_element_set_state(parent, GST_STATE_NULL); gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(parent)), parent); + } else if (result == GST_ITERATOR_OK) { + gst_object_unref(remaining_pad); } gst_iterator_free(iter);