v4l2allocator: Add protection against driver bug
authorNicolas Dufresne <nicolas.dufresne@collabora.co.uk>
Wed, 7 Jan 2015 23:48:58 +0000 (18:48 -0500)
committerNicolas Dufresne <nicolas.dufresne@collabora.co.uk>
Fri, 9 Jan 2015 04:55:28 +0000 (23:55 -0500)
v4l2loopback driver has a this nasty bug that if the queue is larger
then 2 buffers, it returns random index on dqbuf. So far we assumed
that the index was always right, which would lead to memory being
unref twice, and eventually crash.

sys/v4l2/gstv4l2allocator.c

index 97f8752..76986ba 100644 (file)
@@ -1305,6 +1305,13 @@ gst_v4l2_allocator_dqbuf (GstV4l2Allocator * allocator)
     goto error;
 
   group = allocator->groups[buffer.index];
+
+  if (!IS_QUEUED (group->buffer)) {
+    GST_ERROR_OBJECT (allocator,
+        "buffer %i was not queued, this indicate a driver bug.", buffer.index);
+    return NULL;
+  }
+
   group->buffer = buffer;
 
   GST_LOG_OBJECT (allocator, "dequeued buffer %i (flags 0x%X)", buffer.index,