v4l2: make sure the element is not deleted before the pool
authorMichael Olbrich <m.olbrich@pengutronix.de>
Wed, 5 Jun 2013 14:32:30 +0000 (16:32 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Fri, 7 Jun 2013 18:07:42 +0000 (20:07 +0200)
The pool accesses data from the v4l2object so it must exist at least
as long as the pool. Refcount the element which controls the object
live-time.

https://bugzilla.gnome.org/show_bug.cgi?id=701650

sys/v4l2/gstv4l2bufferpool.c

index 34a444b39e766bfcb9434726c3504ad91cce3aa6..3ead390968f256f1c5e52ceab1c07ce2298f0fc1 100644 (file)
@@ -1017,6 +1017,8 @@ gst_v4l2_buffer_pool_finalize (GObject * object)
     gst_object_unref (pool->allocator);
   g_free (pool->buffers);
 
+  gst_object_unref (pool->obj->element);
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -1070,6 +1072,8 @@ gst_v4l2_buffer_pool_new (GstV4l2Object * obj, GstCaps * caps)
   gst_buffer_pool_config_set_params (s, caps, obj->sizeimage, 2, 0);
   gst_buffer_pool_set_config (GST_BUFFER_POOL_CAST (pool), s);
 
+  gst_object_ref (obj->element);
+
   return GST_BUFFER_POOL (pool);
 
   /* ERRORS */