diff --git a/src/pipewire/mem.c b/src/pipewire/mem.c index 31e9f6d76..4433af7d8 100644 --- a/src/pipewire/mem.c +++ b/src/pipewire/mem.c @@ -155,19 +155,26 @@ struct pw_mempool *pw_mempool_new(struct pw_properties *props) return this; } -void pw_mempool_destroy(struct pw_mempool *pool) +void pw_mempool_clear(struct pw_mempool *pool) { struct mempool *impl = SPA_CONTAINER_OF(pool, struct mempool, this); struct memblock *b; + spa_list_consume(b, &impl->blocks, link) + pw_memblock_free(&b->this); +} + +void pw_mempool_destroy(struct pw_mempool *pool) +{ + struct mempool *impl = SPA_CONTAINER_OF(pool, struct mempool, this); + pw_log_debug(NAME" %p: destroy", pool); pw_mempool_emit_destroy(impl); - spa_list_remove(&impl->link); + pw_mempool_clear(pool); - spa_list_consume(b, &impl->blocks, link) - pw_memblock_free(&b->this); + spa_list_remove(&impl->link); pw_map_clear(&impl->map); if (pool->props) diff --git a/src/pipewire/mem.h b/src/pipewire/mem.h index 5d3946780..433b2c7bc 100644 --- a/src/pipewire/mem.h +++ b/src/pipewire/mem.h @@ -105,7 +105,10 @@ void pw_mempool_add_listener(struct pw_mempool *pool, const struct pw_mempool_events *events, void *data); -/** Destroy a pool */ +/** Clear a pool */ +void pw_mempool_clear(struct pw_mempool *pool); + +/** Clear and destroy a pool */ void pw_mempool_destroy(struct pw_mempool *pool);