Lines Matching refs:pool
86 free_object (struct mempool *pool, void *object)
90 obj->next = pool->free_list;
91 pool->free_list = obj;
92 ++pool->num_free;
96 add_memory (struct mempool *pool, char *mem, size_t size, size_t obj_size)
101 free_object (pool, obj);
105 expand (struct mempool *pool)
110 size = pool->chunk_size;
114 size = UNW_ALIGN(pool->obj_size, pg_size);
119 size = pool->obj_size;
123 add_memory (pool, mem, size, pool->obj_size);
127 mempool_init (struct mempool *pool, size_t obj_size, size_t reserve)
132 memset (pool, 0, sizeof (*pool));
134 lock_init (&pool->lock);
146 pool->obj_size = obj_size;
147 pool->reserve = reserve;
148 pool->chunk_size = UNW_ALIGN(2*reserve*obj_size, pg_size);
150 expand (pool);
154 mempool_alloc (struct mempool *pool)
159 lock_acquire (&pool->lock, saved_mask);
161 if (pool->num_free <= pool->reserve)
162 expand (pool);
164 assert (pool->num_free > 0);
166 --pool->num_free;
167 obj = pool->free_list;
168 pool->free_list = obj->next;
170 lock_release (&pool->lock, saved_mask);
175 mempool_free (struct mempool *pool, void *object)
179 lock_acquire (&pool->lock, saved_mask);
181 free_object (pool, object);
183 lock_release (&pool->lock, saved_mask);