gluploadelement: fix leak of upload library object
authorMatthew Waters <matthew@centricular.com>
Wed, 5 Oct 2016 07:28:48 +0000 (18:28 +1100)
committerMatthew Waters <matthew@centricular.com>
Wed, 5 Oct 2016 07:28:48 +0000 (18:28 +1100)
When only linking the element, the upload object will be created from
_transform_caps() but will never be unreffed as the only case is in _stop().

Add an unref if non-NULL to a new finalize handler for this case.

ext/gl/gstgluploadelement.c

index d3ed276..f9e52f6 100644 (file)
@@ -62,10 +62,23 @@ GST_STATIC_PAD_TEMPLATE ("src",
     GST_STATIC_CAPS ("video/x-raw(ANY)"));
 
 static void
+gst_gl_upload_element_finalize (GObject * object)
+{
+  GstGLUploadElement *upload = GST_GL_UPLOAD_ELEMENT (object);
+
+  if (upload->upload)
+    gst_object_unref (upload->upload);
+  upload->upload = NULL;
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
 gst_gl_upload_element_class_init (GstGLUploadElementClass * klass)
 {
   GstBaseTransformClass *bt_class = GST_BASE_TRANSFORM_CLASS (klass);
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   GstCaps *upload_caps;
 
   bt_class->transform_caps = _gst_gl_upload_element_transform_caps;
@@ -91,6 +104,8 @@ gst_gl_upload_element_class_init (GstGLUploadElementClass * klass)
   gst_element_class_set_metadata (element_class,
       "OpenGL uploader", "Filter/Video",
       "Uploads data into OpenGL", "Matthew Waters <matthew@centricular.com>");
+
+  gobject_class->finalize = gst_gl_upload_element_finalize;
 }
 
 static void