glmemorypbo: unmap pbo memory on pbo read error
authorMatthew Waters <matthew@centricular.com>
Thu, 31 Mar 2016 08:31:00 +0000 (19:31 +1100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:32:18 +0000 (19:32 +0000)
Otherwise we are returning failure with a dangling map!

Also only unset the NEED_DOWNLOAD flag in download_transfer() if the read actually
succeeds.

gst-libs/gst/gl/gstglmemorypbo.c

index f653e1c389973001e4667999274cb92cb90448c4..d8fa710624f18fba84676e3486d42f00ff7c8b02 100644 (file)
@@ -305,8 +305,10 @@ _pbo_download_transfer (GstGLMemoryPBO * gl_mem, GstMapInfo * info, gsize size)
       return NULL;
     }
 
-    if (!_read_pixels_to_pbo (gl_mem))
+    if (!_read_pixels_to_pbo (gl_mem)) {
+      gst_memory_unmap (GST_MEMORY_CAST (gl_mem->pbo), &info);
       return NULL;
+    }
 
     gst_memory_unmap (GST_MEMORY_CAST (gl_mem->pbo), &info);
   }
@@ -785,10 +787,11 @@ _download_transfer (GstGLContext * context, GstGLMemoryPBO * gl_mem)
   GstGLBaseMemory *mem = (GstGLBaseMemory *) gl_mem;
 
   g_mutex_lock (&mem->lock);
-  if (_read_pixels_to_pbo (gl_mem))
+  if (_read_pixels_to_pbo (gl_mem)) {
     GST_CAT_TRACE (GST_CAT_GL_MEMORY, "optimistic download of texture %u "
         "using pbo %u", gl_mem->mem.tex_id, gl_mem->pbo->id);
-  GST_MEMORY_FLAG_UNSET (gl_mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
+    GST_MEMORY_FLAG_UNSET (gl_mem, GST_GL_BASE_MEMORY_TRANSFER_NEED_DOWNLOAD);
+  }
   g_mutex_unlock (&mem->lock);
 }