diff options
author | René Stadler <mail@renestadler.de> | 2007-09-09 10:25:43 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2007-09-09 10:25:43 +0000 |
commit | a011ad5aee73beb561faa7c0a520b87d54c20728 (patch) | |
tree | 36546d2f7264048219578d76ea7a1eb0512851fd | |
parent | 6fa7788c5d7ca3ac781cd3e13595cf8ef7ae351c (diff) |
sys/: Correctly chain up finalize with the parent class to prevent memory leaks. Fixes #474880.
Original commit message from CVS:
Patch by: René Stadler <mail at renestadler dot de>
* sys/ximage/ximagesink.c: (gst_ximage_buffer_finalize),
(gst_ximage_buffer_class_init):
* sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
(gst_xvimage_buffer_class_init):
Correctly chain up finalize with the parent class to prevent
memory leaks. Fixes #474880.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | sys/ximage/ximagesink.c | 8 | ||||
-rw-r--r-- | sys/xvimage/xvimagesink.c | 6 |
3 files changed, 25 insertions, 0 deletions
@@ -1,5 +1,16 @@ 2007-09-09 Sebastian Dröge <slomo@circular-chaos.org> + Patch by: René Stadler <mail at renestadler dot de> + + * sys/ximage/ximagesink.c: (gst_ximage_buffer_finalize), + (gst_ximage_buffer_class_init): + * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy), + (gst_xvimage_buffer_class_init): + Correctly chain up finalize with the parent class to prevent + memory leaks. Fixes #474880. + +2007-09-09 Sebastian Dröge <slomo@circular-chaos.org> + * gst/volume/gstvolume.c: (volume_choose_func): * tests/check/elements/volume.c: (GST_START_TEST): Revert the latest change: floating point samples are allowed to diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c index a3612f8a..4a6f095a 100644 --- a/sys/ximage/ximagesink.c +++ b/sys/ximage/ximagesink.c @@ -180,6 +180,8 @@ static GstVideoSinkClass *parent_class = NULL; /* ximage buffers */ +static GstBufferClass *ximage_buffer_parent_class = NULL; + #define GST_TYPE_XIMAGE_BUFFER (gst_ximage_buffer_get_type()) #define GST_IS_XIMAGE_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_XIMAGE_BUFFER)) @@ -236,6 +238,10 @@ gst_ximage_buffer_finalize (GstXImageBuffer * ximage) recycled = TRUE; } + if (!recycled) + GST_MINI_OBJECT_CLASS (ximage_buffer_parent_class)-> + finalize (GST_MINI_OBJECT (ximage)); + beach: return; } @@ -263,6 +269,8 @@ gst_ximage_buffer_class_init (gpointer g_class, gpointer class_data) { GstMiniObjectClass *mini_object_class = GST_MINI_OBJECT_CLASS (g_class); + ximage_buffer_parent_class = g_type_class_peek_parent (g_class); + mini_object_class->finalize = (GstMiniObjectFinalizeFunction) gst_ximage_buffer_finalize; } diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index 0e486349..41be1fc1 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -151,6 +151,7 @@ MotifWmHints, MwmHints; static void gst_xvimagesink_reset (GstXvImageSink * xvimagesink); +static GstBufferClass *xvimage_buffer_parent_class = NULL; static void gst_xvimage_buffer_finalize (GstXvImageBuffer * xvimage); static void gst_xvimagesink_xwindow_update_geometry (GstXvImageSink * @@ -281,6 +282,9 @@ beach: xvimage->xvimagesink = NULL; gst_object_unref (xvimagesink); + GST_MINI_OBJECT_CLASS (xvimage_buffer_parent_class)-> + finalize (GST_MINI_OBJECT (xvimage)); + return; no_sink: @@ -359,6 +363,8 @@ gst_xvimage_buffer_class_init (gpointer g_class, gpointer class_data) { GstMiniObjectClass *mini_object_class = GST_MINI_OBJECT_CLASS (g_class); + xvimage_buffer_parent_class = g_type_class_peek_parent (g_class); + mini_object_class->finalize = (GstMiniObjectFinalizeFunction) gst_xvimage_buffer_finalize; } |