From: Peter Kjellerstedt Date: Mon, 27 Oct 2008 08:45:11 +0000 (+0000) Subject: gst/matroska/matroska-mux.c: Fix a memory leak when pads are requested but the pipeli... X-Git-Tag: 1.19.3~509^2~10943 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=40d198cfd8782b8eaeed731aaae17308c4b20916;p=platform%2Fupstream%2Fgstreamer.git gst/matroska/matroska-mux.c: Fix a memory leak when pads are requested but the pipeline never goes into PLAYING. Original commit message from CVS: Patch by: Peter Kjellerstedt * gst/matroska/matroska-mux.c: (gst_matroska_mux_reset), (gst_matroska_mux_request_new_pad), (gst_matroska_mux_release_pad): Fix a memory leak when pads are requested but the pipeline never goes into PLAYING. Correctly remove request pads, no matter if they have collected data or not. Fixes bug #557710. --- diff --git a/ChangeLog b/ChangeLog index 40aa48a..4f6c7ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,19 @@ 2008-10-27 Sebastian Dröge + Patch by: Peter Kjellerstedt + + * gst/matroska/matroska-mux.c: (gst_matroska_mux_reset), + (gst_matroska_mux_request_new_pad), (gst_matroska_mux_release_pad): + Fix a memory leak when pads are requested but the pipeline never + goes into PLAYING. + + Correctly remove request pads, no matter if they have collected + data or not. + + Fixes bug #557710. + +2008-10-27 Sebastian Dröge + Patch by: * gst/udp/gstudpnetutils.h: diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c index dfe51a0..e77d1d8 100644 --- a/gst/matroska/matroska-mux.c +++ b/gst/matroska/matroska-mux.c @@ -408,9 +408,6 @@ gst_matroska_mux_reset (GstElement * element) collect_pad = (GstMatroskaPad *) walk->data; thepad = collect_pad->collect.pad; - /* free collect pad resources */ - gst_matroska_pad_free (collect_pad); - /* remove from collectpads */ gst_collect_pads_remove_pad (mux->collect, thepad); } @@ -1362,7 +1359,9 @@ gst_matroska_mux_request_new_pad (GstElement * element, newpad = gst_pad_new_from_template (templ, name); g_free (name); collect_pad = (GstMatroskaPad *) - gst_collect_pads_add_pad (mux->collect, newpad, sizeof (GstMatroskaPad)); + gst_collect_pads_add_pad_full (mux->collect, newpad, + sizeof (GstMatroskaPad), + (GstCollectDataDestroyNotify) gst_matroska_pad_free); /* TODO: check default values for the context */ context->flags = GST_MATROSKA_TRACK_ENABLED | GST_MATROSKA_TRACK_DEFAULT; @@ -1424,15 +1423,13 @@ gst_matroska_mux_release_pad (GstElement * element, GstPad * pad) mux->duration < collect_pad->duration) mux->duration = collect_pad->duration; - gst_matroska_pad_free (collect_pad); - gst_collect_pads_remove_pad (mux->collect, pad); - gst_element_remove_pad (element, pad); - mux->num_streams--; - return; + break; } } - g_warning ("%s: unknown pad %s", GST_FUNCTION, GST_PAD_NAME (pad)); + gst_collect_pads_remove_pad (mux->collect, pad); + if (gst_element_remove_pad (element, pad)) + mux->num_streams--; }