From: HÃ¥vard Graff Date: Wed, 9 Dec 2009 13:42:21 +0000 (+0100) Subject: rtpmux: release pads when disposing X-Git-Tag: 1.19.3~509^2~6216 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eab65e84ca1b9fed585dc222254e55fa4c0bf41b;p=platform%2Fupstream%2Fgstreamer.git rtpmux: release pads when disposing Because of an allocated priv (GstRTPMuxPadPrivate), the element will leak memory if not gst_rtp_mux_release_pad() is called. This would previously only happen if release_request_pad() was called explicitly, somthing that should not be neccesary. Fixes #604099 --- diff --git a/gst/rtpmanager/gstrtpmux.c b/gst/rtpmanager/gstrtpmux.c index 84d9d4d..21d0321 100644 --- a/gst/rtpmanager/gstrtpmux.c +++ b/gst/rtpmanager/gstrtpmux.c @@ -97,7 +97,7 @@ static void gst_rtp_mux_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_rtp_mux_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); - +static void gst_rtp_mux_dispose (GObject * object); GST_BOILERPLATE (GstRTPMux, gst_rtp_mux, GstElement, GST_TYPE_ELEMENT); @@ -125,6 +125,7 @@ gst_rtp_mux_class_init (GstRTPMuxClass * klass) gobject_class->get_property = gst_rtp_mux_get_property; gobject_class->set_property = gst_rtp_mux_set_property; + gobject_class->dispose = gst_rtp_mux_dispose; g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TIMESTAMP_OFFSET, g_param_spec_int ("timestamp-offset", @@ -152,6 +153,23 @@ gst_rtp_mux_class_init (GstRTPMuxClass * klass) klass->chain_func = gst_rtp_mux_chain; } +static void +gst_rtp_mux_dispose (GObject * object) +{ + GList *item; + +restart: + for (item = GST_ELEMENT_PADS (object); item; item = g_list_next (item)) { + GstPad *pad = GST_PAD (item->data); + if (GST_PAD_IS_SINK (pad)) { + gst_element_release_request_pad (GST_ELEMENT (object), pad); + goto restart; + } + } + + G_OBJECT_CLASS (parent_class)->dispose (object); +} + static gboolean gst_rtp_mux_src_event (GstPad * pad, GstEvent * event) {