dmabuf: Make sure that memory is unmapped before releasing it
authorBenjamin Gaignard <benjamin.gaignard@linaro.org>
Fri, 17 May 2013 07:16:08 +0000 (09:16 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 17 May 2013 07:50:23 +0000 (09:50 +0200)
Be sure that memory is unmapped before releasing it.

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

gst-libs/gst/allocators/gstdmabuf.c

index 95d26bb..4a95f47 100644 (file)
@@ -62,17 +62,18 @@ GST_DEBUG_CATEGORY_STATIC (dmabuf_debug);
 #define GST_CAT_DEFAULT dmabuf_debug
 
 static void
-gst_dmabuf_allocator_free (GstAllocator * allocator, GstMemory * mem)
+gst_dmabuf_allocator_free (GstAllocator * allocator, GstMemory * gmem)
 {
-  GstDmaBufMemory *dbmem = (GstDmaBufMemory *) mem;
-
-  if (dbmem->data)
-    g_warning ("Freeing memory still mapped");
+  GstDmaBufMemory *mem = (GstDmaBufMemory *) gmem;
 
-  close (dbmem->fd);
-  g_mutex_clear (&dbmem->lock);
-  g_slice_free (GstDmaBufMemory, dbmem);
-  GST_DEBUG ("%p: freed", dbmem);
+  if (mem->data) {
+    g_warning (G_STRLOC ":%s: Freeing memory %p still mapped", G_STRFUNC, mem);
+    munmap ((void *) mem->data, mem->mmap_size);
+  }
+  close (mem->fd);
+  g_mutex_clear (&mem->lock);
+  g_slice_free (GstDmaBufMemory, mem);
+  GST_DEBUG ("%p: freed", mem);
 }
 
 static gpointer