summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorRené Stadler <mail@renestadler.de>2007-09-09 10:25:43 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2007-09-09 10:25:43 +0000
commita011ad5aee73beb561faa7c0a520b87d54c20728 (patch)
tree36546d2f7264048219578d76ea7a1eb0512851fd /sys
parent6fa7788c5d7ca3ac781cd3e13595cf8ef7ae351c (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.
Diffstat (limited to 'sys')
-rw-r--r--sys/ximage/ximagesink.c8
-rw-r--r--sys/xvimage/xvimagesink.c6
2 files changed, 14 insertions, 0 deletions
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;
}