mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-23 14:36:24 +00:00
memory: avoid memory leak
Unref the old memory in make_mapped. Add some debug info
This commit is contained in:
parent
ae12e4f645
commit
2ed36d91a6
1 changed files with 11 additions and 0 deletions
|
@ -130,6 +130,8 @@ _default_mem_init (GstMemoryDefault * mem, GstMemoryFlags flags,
|
||||||
mem->slice_size = slice_size;
|
mem->slice_size = slice_size;
|
||||||
mem->data = data;
|
mem->data = data;
|
||||||
mem->free_func = free_func;
|
mem->free_func = free_func;
|
||||||
|
|
||||||
|
GST_DEBUG ("new memory %p", mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* create a new memory block that manages the given memory */
|
/* create a new memory block that manages the given memory */
|
||||||
|
@ -200,6 +202,8 @@ _default_mem_unmap (GstMemoryDefault * mem)
|
||||||
static void
|
static void
|
||||||
_default_mem_free (GstMemoryDefault * mem)
|
_default_mem_free (GstMemoryDefault * mem)
|
||||||
{
|
{
|
||||||
|
GST_DEBUG ("free memory %p", mem);
|
||||||
|
|
||||||
if (mem->mem.parent)
|
if (mem->mem.parent)
|
||||||
gst_memory_unref (mem->mem.parent);
|
gst_memory_unref (mem->mem.parent);
|
||||||
|
|
||||||
|
@ -369,6 +373,8 @@ gst_memory_ref (GstMemory * mem)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (mem != NULL, NULL);
|
g_return_val_if_fail (mem != NULL, NULL);
|
||||||
|
|
||||||
|
GST_DEBUG ("memory %p, %d->%d", mem, mem->refcount, mem->refcount + 1);
|
||||||
|
|
||||||
g_atomic_int_inc (&mem->refcount);
|
g_atomic_int_inc (&mem->refcount);
|
||||||
|
|
||||||
return mem;
|
return mem;
|
||||||
|
@ -387,6 +393,8 @@ gst_memory_unref (GstMemory * mem)
|
||||||
g_return_if_fail (mem != NULL);
|
g_return_if_fail (mem != NULL);
|
||||||
g_return_if_fail (mem->allocator != NULL);
|
g_return_if_fail (mem->allocator != NULL);
|
||||||
|
|
||||||
|
GST_DEBUG ("memory %p, %d->%d", mem, mem->refcount, mem->refcount - 1);
|
||||||
|
|
||||||
if (g_atomic_int_dec_and_test (&mem->refcount))
|
if (g_atomic_int_dec_and_test (&mem->refcount))
|
||||||
mem->allocator->info.free (mem);
|
mem->allocator->info.free (mem);
|
||||||
}
|
}
|
||||||
|
@ -525,6 +533,8 @@ gst_memory_make_mapped (GstMemory * mem, GstMapInfo * info, GstMapFlags flags)
|
||||||
result = mem;
|
result = mem;
|
||||||
} else {
|
} else {
|
||||||
result = gst_memory_copy (mem, 0, -1);
|
result = gst_memory_copy (mem, 0, -1);
|
||||||
|
gst_memory_unref (mem);
|
||||||
|
|
||||||
if (result == NULL)
|
if (result == NULL)
|
||||||
goto cannot_copy;
|
goto cannot_copy;
|
||||||
|
|
||||||
|
@ -542,6 +552,7 @@ cannot_copy:
|
||||||
cannot_map:
|
cannot_map:
|
||||||
{
|
{
|
||||||
GST_DEBUG ("cannot map memory %p with flags %d", mem, flags);
|
GST_DEBUG ("cannot map memory %p with flags %d", mem, flags);
|
||||||
|
gst_memory_unref (result);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue