+void mem_pool_init(struct mem_pool **mem_pool, size_t initial_size)
+{
+ struct mem_pool *pool;
+
+ if (*mem_pool)
+ return;
+
+ pool = xcalloc(1, sizeof(*pool));
+
+ pool->block_alloc = BLOCK_GROWTH_SIZE;
+
+ if (initial_size > 0)
+ mem_pool_alloc_block(pool, initial_size, NULL);
+
+ *mem_pool = pool;
+}
+
+void mem_pool_discard(struct mem_pool *mem_pool)
+{
+ struct mp_block *block, *block_to_free;
+
+ while ((block = mem_pool->mp_block))
+ {
+ block_to_free = block;
+ block = block->next_block;
+ free(block_to_free);
+ }
+
+ free(mem_pool);
+}
+