allocator, buffer, bufferlist: drop use of GSlice

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695>
This commit is contained in:
Tim-Philipp Müller 2023-01-07 19:37:52 +00:00 committed by GStreamer Marge Bot
parent 9e71898337
commit 25f7fa1efc
3 changed files with 28 additions and 56 deletions

View file

@ -46,6 +46,7 @@
#endif #endif
#include "gst_private.h" #include "gst_private.h"
#include "glib-compat-private.h"
#include "gstmemory.h" #include "gstmemory.h"
GST_DEBUG_CATEGORY_STATIC (gst_allocator_debug); GST_DEBUG_CATEGORY_STATIC (gst_allocator_debug);
@ -162,7 +163,7 @@ gst_allocation_params_new (void)
{ {
/* Call new() and then init(), rather than calling new0(), in case /* Call new() and then init(), rather than calling new0(), in case
* init() ever changes to something other than a memset(). */ * init() ever changes to something other than a memset(). */
GstAllocationParams *result = g_slice_new (GstAllocationParams); GstAllocationParams *result = g_new (GstAllocationParams, 1);
gst_allocation_params_init (result); gst_allocation_params_init (result);
return result; return result;
} }
@ -196,8 +197,8 @@ gst_allocation_params_copy (const GstAllocationParams * params)
if (params) { if (params) {
result = result =
(GstAllocationParams *) g_slice_copy (sizeof (GstAllocationParams), (GstAllocationParams *) g_memdup2 (params,
params); sizeof (GstAllocationParams));
} }
return result; return result;
} }
@ -211,7 +212,7 @@ gst_allocation_params_copy (const GstAllocationParams * params)
void void
gst_allocation_params_free (GstAllocationParams * params) gst_allocation_params_free (GstAllocationParams * params)
{ {
g_slice_free (GstAllocationParams, params); g_free (params);
} }
/** /**
@ -364,7 +365,6 @@ typedef struct
{ {
GstMemory mem; GstMemory mem;
gsize slice_size;
guint8 *data; guint8 *data;
gpointer user_data; gpointer user_data;
@ -387,14 +387,13 @@ G_DEFINE_TYPE (GstAllocatorSysmem, gst_allocator_sysmem, GST_TYPE_ALLOCATOR);
/* initialize the fields */ /* initialize the fields */
static inline void static inline void
_sysmem_init (GstMemorySystem * mem, GstMemoryFlags flags, _sysmem_init (GstMemorySystem * mem, GstMemoryFlags flags,
GstMemory * parent, gsize slice_size, GstMemory * parent,
gpointer data, gsize maxsize, gsize align, gsize offset, gsize size, gpointer data, gsize maxsize, gsize align, gsize offset, gsize size,
gpointer user_data, GDestroyNotify notify) gpointer user_data, GDestroyNotify notify)
{ {
gst_memory_init (GST_MEMORY_CAST (mem), gst_memory_init (GST_MEMORY_CAST (mem),
flags, _sysmem_allocator, parent, maxsize, align, offset, size); flags, _sysmem_allocator, parent, maxsize, align, offset, size);
mem->slice_size = slice_size;
mem->data = data; mem->data = data;
mem->user_data = user_data; mem->user_data = user_data;
mem->notify = notify; mem->notify = notify;
@ -407,12 +406,9 @@ _sysmem_new (GstMemoryFlags flags,
gsize size, gpointer user_data, GDestroyNotify notify) gsize size, gpointer user_data, GDestroyNotify notify)
{ {
GstMemorySystem *mem; GstMemorySystem *mem;
gsize slice_size;
slice_size = sizeof (GstMemorySystem); mem = g_new (GstMemorySystem, 1);
_sysmem_init (mem, flags, parent,
mem = g_slice_alloc (slice_size);
_sysmem_init (mem, flags, parent, slice_size,
data, maxsize, align, offset, size, user_data, notify); data, maxsize, align, offset, size, user_data, notify);
return mem; return mem;
@ -434,7 +430,7 @@ _sysmem_new_block (GstMemoryFlags flags,
/* alloc header and data in one block */ /* alloc header and data in one block */
slice_size = sizeof (GstMemorySystem) + maxsize; slice_size = sizeof (GstMemorySystem) + maxsize;
mem = g_slice_alloc (slice_size); mem = g_malloc (slice_size);
if (mem == NULL) if (mem == NULL)
return NULL; return NULL;
@ -454,7 +450,7 @@ _sysmem_new_block (GstMemoryFlags flags,
if (padding && (flags & GST_MEMORY_FLAG_ZERO_PADDED)) if (padding && (flags & GST_MEMORY_FLAG_ZERO_PADDED))
memset (data + offset + size, 0, padding); memset (data + offset + size, 0, padding);
_sysmem_init (mem, flags, NULL, slice_size, data, maxsize, _sysmem_init (mem, flags, NULL, data, maxsize,
align, offset, size, NULL, NULL); align, offset, size, NULL, NULL);
return mem; return mem;
@ -541,19 +537,16 @@ static void
default_free (GstAllocator * allocator, GstMemory * mem) default_free (GstAllocator * allocator, GstMemory * mem)
{ {
GstMemorySystem *dmem = (GstMemorySystem *) mem; GstMemorySystem *dmem = (GstMemorySystem *) mem;
gsize slice_size;
if (dmem->notify) if (dmem->notify)
dmem->notify (dmem->user_data); dmem->notify (dmem->user_data);
slice_size = dmem->slice_size;
#ifdef USE_POISONING #ifdef USE_POISONING
/* just poison the structs, not all the data */ /* just poison the structs, not all the data */
memset (mem, 0xff, sizeof (GstMemorySystem)); memset (mem, 0xff, sizeof (GstMemorySystem));
#endif #endif
g_slice_free1 (slice_size, mem); g_free (mem);
} }
static void static void

View file

@ -145,7 +145,6 @@ GType _gst_buffer_type = 0;
#define GST_BUFFER_MEM_MAX 16 #define GST_BUFFER_MEM_MAX 16
#define GST_BUFFER_SLICE_SIZE(b) (((GstBufferImpl *)(b))->slice_size)
#define GST_BUFFER_MEM_LEN(b) (((GstBufferImpl *)(b))->len) #define GST_BUFFER_MEM_LEN(b) (((GstBufferImpl *)(b))->len)
#define GST_BUFFER_MEM_ARRAY(b) (((GstBufferImpl *)(b))->mem) #define GST_BUFFER_MEM_ARRAY(b) (((GstBufferImpl *)(b))->mem)
#define GST_BUFFER_MEM_PTR(b,i) (((GstBufferImpl *)(b))->mem[i]) #define GST_BUFFER_MEM_PTR(b,i) (((GstBufferImpl *)(b))->mem[i])
@ -157,8 +156,6 @@ typedef struct
{ {
GstBuffer buffer; GstBuffer buffer;
gsize slice_size;
/* the memory blocks */ /* the memory blocks */
guint len; guint len;
GstMemory *mem[GST_BUFFER_MEM_MAX]; GstMemory *mem[GST_BUFFER_MEM_MAX];
@ -782,7 +779,6 @@ _gst_buffer_free (GstBuffer * buffer)
{ {
GstMetaItem *walk, *next; GstMetaItem *walk, *next;
guint i, len; guint i, len;
gsize msize;
g_return_if_fail (buffer != NULL); g_return_if_fail (buffer != NULL);
@ -799,13 +795,9 @@ _gst_buffer_free (GstBuffer * buffer)
next = walk->next; next = walk->next;
/* and free the slice */ /* and free the slice */
g_slice_free1 (ITEM_SIZE (info), walk); g_free (walk);
} }
/* get the size, when unreffing the memory, we could also unref the buffer
* itself */
msize = GST_BUFFER_SLICE_SIZE (buffer);
/* free our memory */ /* free our memory */
len = GST_BUFFER_MEM_LEN (buffer); len = GST_BUFFER_MEM_LEN (buffer);
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
@ -815,27 +807,20 @@ _gst_buffer_free (GstBuffer * buffer)
gst_memory_unref (GST_BUFFER_MEM_PTR (buffer, i)); gst_memory_unref (GST_BUFFER_MEM_PTR (buffer, i));
} }
/* we set msize to 0 when the buffer is part of the memory block */
if (msize) {
#ifdef USE_POISONING #ifdef USE_POISONING
memset (buffer, 0xff, msize); memset (buffer, 0xff, sizeof (GstBufferImpl));
#endif #endif
g_slice_free1 (msize, buffer); g_free (buffer);
} else {
gst_memory_unref (GST_BUFFER_BUFMEM (buffer));
}
} }
static void static void
gst_buffer_init (GstBufferImpl * buffer, gsize size) gst_buffer_init (GstBufferImpl * buffer)
{ {
gst_mini_object_init (GST_MINI_OBJECT_CAST (buffer), 0, _gst_buffer_type, gst_mini_object_init (GST_MINI_OBJECT_CAST (buffer), 0, _gst_buffer_type,
(GstMiniObjectCopyFunction) _gst_buffer_copy, (GstMiniObjectCopyFunction) _gst_buffer_copy,
(GstMiniObjectDisposeFunction) _gst_buffer_dispose, (GstMiniObjectDisposeFunction) _gst_buffer_dispose,
(GstMiniObjectFreeFunction) _gst_buffer_free); (GstMiniObjectFreeFunction) _gst_buffer_free);
GST_BUFFER_SLICE_SIZE (buffer) = size;
GST_BUFFER (buffer)->pool = NULL; GST_BUFFER (buffer)->pool = NULL;
GST_BUFFER_PTS (buffer) = GST_CLOCK_TIME_NONE; GST_BUFFER_PTS (buffer) = GST_CLOCK_TIME_NONE;
GST_BUFFER_DTS (buffer) = GST_CLOCK_TIME_NONE; GST_BUFFER_DTS (buffer) = GST_CLOCK_TIME_NONE;
@ -859,10 +844,10 @@ gst_buffer_new (void)
{ {
GstBufferImpl *newbuf; GstBufferImpl *newbuf;
newbuf = g_slice_new (GstBufferImpl); newbuf = g_new (GstBufferImpl, 1);
GST_CAT_LOG (GST_CAT_BUFFER, "new %p", newbuf); GST_CAT_LOG (GST_CAT_BUFFER, "new %p", newbuf);
gst_buffer_init (newbuf, sizeof (GstBufferImpl)); gst_buffer_init (newbuf);
return GST_BUFFER_CAST (newbuf); return GST_BUFFER_CAST (newbuf);
} }
@ -918,7 +903,7 @@ gst_buffer_new_allocate (GstAllocator * allocator, gsize size,
#if 0 #if 0
asize = sizeof (GstBufferImpl) + size; asize = sizeof (GstBufferImpl) + size;
data = g_slice_alloc (asize); data = g_malloc (asize);
if (G_UNLIKELY (data == NULL)) if (G_UNLIKELY (data == NULL))
goto no_memory; goto no_memory;
@ -2311,9 +2296,9 @@ gst_buffer_add_meta (GstBuffer * buffer, const GstMetaInfo * info,
* uninitialized memory * uninitialized memory
*/ */
if (!info->init_func) if (!info->init_func)
item = g_slice_alloc0 (size); item = g_malloc0 (size);
else else
item = g_slice_alloc (size); item = g_malloc (size);
result = &item->meta; result = &item->meta;
result->info = info; result->info = info;
result->flags = GST_META_FLAG_NONE; result->flags = GST_META_FLAG_NONE;
@ -2341,7 +2326,7 @@ gst_buffer_add_meta (GstBuffer * buffer, const GstMetaInfo * info,
init_failed: init_failed:
{ {
g_slice_free1 (size, item); g_free (item);
return NULL; return NULL;
} }
} }
@ -2392,7 +2377,7 @@ gst_buffer_remove_meta (GstBuffer * buffer, GstMeta * meta)
info->free_func (m, buffer); info->free_func (m, buffer);
/* and free the slice */ /* and free the slice */
g_slice_free1 (ITEM_SIZE (info), walk); g_free (walk);
break; break;
} }
prev = walk; prev = walk;
@ -2540,7 +2525,7 @@ gst_buffer_foreach_meta (GstBuffer * buffer, GstBufferForeachMetaFunc func,
info->free_func (m, buffer); info->free_func (m, buffer);
/* and free the slice */ /* and free the slice */
g_slice_free1 (ITEM_SIZE (info), walk); g_free (walk);
} else { } else {
prev = walk; prev = walk;
} }

View file

@ -61,8 +61,6 @@ struct _GstBufferList
guint n_buffers; guint n_buffers;
guint n_allocated; guint n_allocated;
gsize slice_size;
/* one-item array, in reality more items are pre-allocated /* one-item array, in reality more items are pre-allocated
* as part of the GstBufferList structure, and that * as part of the GstBufferList structure, and that
* pre-allocated array extends beyond the declared struct */ * pre-allocated array extends beyond the declared struct */
@ -104,7 +102,6 @@ static void
_gst_buffer_list_free (GstBufferList * list) _gst_buffer_list_free (GstBufferList * list)
{ {
guint i, len; guint i, len;
gsize slice_size;
GST_LOG ("free %p", list); GST_LOG ("free %p", list);
@ -119,17 +116,15 @@ _gst_buffer_list_free (GstBufferList * list)
if (GST_BUFFER_LIST_IS_USING_DYNAMIC_ARRAY (list)) if (GST_BUFFER_LIST_IS_USING_DYNAMIC_ARRAY (list))
g_free (list->buffers); g_free (list->buffers);
slice_size = list->slice_size;
#ifdef USE_POISONING #ifdef USE_POISONING
memset (list, 0xff, slice_size); memset (list, 0xff, sizeof (GstBufferList));
#endif #endif
g_slice_free1 (slice_size, list); g_free (list);
} }
static void static void
gst_buffer_list_init (GstBufferList * list, guint n_allocated, gsize slice_size) gst_buffer_list_init (GstBufferList * list, guint n_allocated)
{ {
gst_mini_object_init (GST_MINI_OBJECT_CAST (list), 0, _gst_buffer_list_type, gst_mini_object_init (GST_MINI_OBJECT_CAST (list), 0, _gst_buffer_list_type,
(GstMiniObjectCopyFunction) _gst_buffer_list_copy, NULL, (GstMiniObjectCopyFunction) _gst_buffer_list_copy, NULL,
@ -138,7 +133,6 @@ gst_buffer_list_init (GstBufferList * list, guint n_allocated, gsize slice_size)
list->buffers = &list->arr[0]; list->buffers = &list->arr[0];
list->n_buffers = 0; list->n_buffers = 0;
list->n_allocated = n_allocated; list->n_allocated = n_allocated;
list->slice_size = slice_size;
GST_LOG ("init %p", list); GST_LOG ("init %p", list);
} }
@ -166,11 +160,11 @@ gst_buffer_list_new_sized (guint size)
slice_size = sizeof (GstBufferList) + (n_allocated - 1) * sizeof (gpointer); slice_size = sizeof (GstBufferList) + (n_allocated - 1) * sizeof (gpointer);
list = g_slice_alloc0 (slice_size); list = g_malloc0 (slice_size);
GST_LOG ("new %p", list); GST_LOG ("new %p", list);
gst_buffer_list_init (list, n_allocated, slice_size); gst_buffer_list_init (list, n_allocated);
return list; return list;
} }