msdk: fix memory leaks in msdk allocators
authorHaihao Xiang <haihao.xiang@intel.com>
Thu, 29 Aug 2019 07:28:36 +0000 (15:28 +0800)
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Fri, 13 Sep 2019 16:54:21 +0000 (16:54 +0000)
sys/msdk/gstmsdksystemmemory.c
sys/msdk/gstmsdkvideomemory.c

index 6b7900f..80f689f 100644 (file)
@@ -199,13 +199,21 @@ gst_msdk_system_memory_new (GstAllocator * base_allocator)
 
   mem->surface = gst_msdk_system_allocator_create_surface (base_allocator);
 
+  if (!mem->surface) {
+    g_slice_free (GstMsdkSystemMemory, mem);
+    return NULL;
+  }
+
   vip = &allocator->image_info;
   gst_memory_init (&mem->parent_instance, 0,
       base_allocator, NULL, GST_VIDEO_INFO_SIZE (vip), 0, 0,
       GST_VIDEO_INFO_SIZE (vip));
 
-  if (!ensure_data (mem))
+  if (!ensure_data (mem)) {
+    g_slice_free (mfxFrameSurface1, mem->surface);
+    g_slice_free (GstMsdkSystemMemory, mem);
     return NULL;
+  }
 
   return GST_MEMORY_CAST (mem);
 }
@@ -278,6 +286,7 @@ gst_msdk_system_allocator_free (GstAllocator * allocator, GstMemory * base_mem)
 
   _aligned_free (mem->cache);
   g_slice_free (mfxFrameSurface1, mem->surface);
+  g_slice_free (GstMsdkSystemMemory, mem);
 }
 
 static GstMemory *
index a59b68f..6e173fa 100644 (file)
@@ -166,8 +166,10 @@ gst_msdk_video_memory_new (GstAllocator * base_allocator)
     return NULL;
 
   mem->surface = gst_msdk_video_allocator_get_surface (base_allocator);
-  if (!mem->surface)
+  if (!mem->surface) {
+    g_slice_free (GstMsdkVideoMemory, mem);
     return NULL;
+  }
 
   vip = &allocator->image_info;
   gst_memory_init (&mem->parent_instance, 0,
@@ -366,6 +368,14 @@ gst_msdk_video_allocator_finalize (GObject * object)
 }
 
 static void
+gst_msdk_video_allocator_free (GstAllocator * allocator, GstMemory * base_mem)
+{
+  GstMsdkVideoMemory *const mem = GST_MSDK_VIDEO_MEMORY_CAST (base_mem);
+
+  g_slice_free (GstMsdkVideoMemory, mem);
+}
+
+static void
 gst_msdk_video_allocator_class_init (GstMsdkVideoAllocatorClass * klass)
 {
   GObjectClass *const object_class = G_OBJECT_CLASS (klass);
@@ -374,6 +384,7 @@ gst_msdk_video_allocator_class_init (GstMsdkVideoAllocatorClass * klass)
   object_class->finalize = gst_msdk_video_allocator_finalize;
 
   allocator_class->alloc = gst_msdk_video_allocator_alloc;
+  allocator_class->free = gst_msdk_video_allocator_free;
 }
 
 static void