summaryrefslogtreecommitdiffstats
path: root/gst/matroska/matroska-mux.c
diff options
context:
space:
mode:
authorPeter Kjellerstedt <pkj@axis.com>2008-10-27 08:45:11 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2008-10-27 08:45:11 +0000
commit40d198cfd8782b8eaeed731aaae17308c4b20916 (patch)
treea7338845a93c07f1a2a84b3c88ce7f34f53853f9 /gst/matroska/matroska-mux.c
parentd956310612fc61878fd0f4e905d37ba3a3ac075c (diff)
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 <pkj at axis com> * 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.
Diffstat (limited to 'gst/matroska/matroska-mux.c')
-rw-r--r--gst/matroska/matroska-mux.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c
index dfe51a07..e77d1d82 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--;
}