diff --git a/src/memory/mempool.c b/src/memory/mempool.c index fd59e82d..1e2eb904 100644 --- a/src/memory/mempool.c +++ b/src/memory/mempool.c @@ -8,16 +8,7 @@ #include "mempool.h" -void mempool_generic_init( - MemPool *pool, - MemArena *arena -) { - *pool = (MemPool) { - .arena = arena, - }; -} - -void *mempool_generic_acquire(MemPool *pool, size_t size, size_t align) { +void *mempool_generic_acquire(MemPool *pool, MemArena *arena, size_t size, size_t align) { MemPoolObjectHeader *obj = pool->free_objects.as_generic; if(obj) { @@ -25,7 +16,7 @@ void *mempool_generic_acquire(MemPool *pool, size_t size, size_t align) { pool->free_objects.as_generic = obj->next; } else { assert(pool->num_used == pool->num_allocated); - obj = marena_alloc_aligned(pool->arena, size, align); + obj = marena_alloc_aligned(arena, size, align); ++pool->num_allocated; } diff --git a/src/memory/mempool.h b/src/memory/mempool.h index 7823c390..78763c38 100644 --- a/src/memory/mempool.h +++ b/src/memory/mempool.h @@ -16,7 +16,6 @@ typedef struct MemPoolObjectHeader { } MemPoolObjectHeader; #define MEMPOOL_BASE(elem_type) struct { \ - MemArena *arena; \ union { \ MemPoolObjectHeader *as_generic; \ elem_type *as_specific; \ @@ -49,22 +48,17 @@ typedef MEMPOOL_BASE(max_align_t) MemPool; #define MEMPOOL_OBJTYPE(mpool) \ typeof(*(mpool)->free_objects.as_specific) -void mempool_generic_init(MemPool *pool, MemArena *arena) - attr_nonnull(1, 2); - -void *mempool_generic_acquire(MemPool *pool, size_t size, size_t align) - attr_returns_allocated attr_hot attr_nonnull(1); +void *mempool_generic_acquire(MemPool *pool, MemArena *arena, size_t size, size_t align) + attr_returns_allocated attr_hot attr_nonnull(1, 2); void mempool_generic_release(MemPool *pool, void *object) attr_hot attr_nonnull(1, 2); -#define mempool_init(mpool, arena) \ - mempool_generic_init(MEMPOOL_CAST_TO_BASE(mpool), (arena)); - -#define mempool_acquire(mpool) ({ \ +#define mempool_acquire(mpool, arena) ({ \ auto _mpool = mpool; \ MEMPOOL_OBJTYPE(_mpool) *_obj = mempool_generic_acquire(\ MEMPOOL_CAST_TO_BASE(_mpool), \ + (arena), \ sizeof(MEMPOOL_OBJTYPE(_mpool)), \ alignof(MEMPOOL_OBJTYPE(_mpool))); \ *_obj = (typeof(*_obj)) {} ; \ diff --git a/src/stageobjects.c b/src/stageobjects.c index 74c31113..588c4c58 100644 --- a/src/stageobjects.c +++ b/src/stageobjects.c @@ -19,11 +19,7 @@ void stage_objpools_init(void) { marena_reset(&stage_objects.arena); } - #define INIT_POOL(type, field) \ - mempool_init(&stage_objects.pools.field, &stage_objects.arena); - - OBJECT_POOLS(INIT_POOL) - #undef INIT_POOL + stage_objects.pools = (typeof(stage_objects.pools)) {}; } void stage_objpools_shutdown(void) { diff --git a/src/stageobjects.h b/src/stageobjects.h index a852d655..4d5ab53f 100644 --- a/src/stageobjects.h +++ b/src/stageobjects.h @@ -66,7 +66,7 @@ void stage_objpools_init(void); void stage_objpools_shutdown(void); #define STAGE_ACQUIRE_OBJ(_type) \ - mempool_acquire(STAGE_OBJPOOL_BY_TYPE(_type)) + mempool_acquire(STAGE_OBJPOOL_BY_TYPE(_type), &stage_objects.arena) #define STAGE_RELEASE_OBJ(_p_obj) \ mempool_release(STAGE_OBJPOOL_BY_VARTYPE(_p_obj), (_p_obj))