Lines Matching refs:pool

46 			void				Remove(rtm_pool* pool,
48 void Enqueue(rtm_pool* pool);
156 FreeChunk::Remove(rtm_pool* pool, FreeChunk* previous)
160 FreeChunk* chunk = pool->free_anchor.fNext;
177 FreeChunk::Enqueue(rtm_pool* pool)
179 FreeChunk* chunk = pool->free_anchor.fNext;
180 FreeChunk* last = &pool->free_anchor;
264 while (rtm_pool* pool = iterator.Next()) {
265 if (pool->Contains(buffer))
266 return pool;
279 rtm_pool* pool = (rtm_pool*)malloc(sizeof(rtm_pool));
280 if (pool == NULL)
284 mutex_init_etc(&pool->lock, name, MUTEX_FLAG_CLONE_NAME);
286 mutex_init(&pool->lock, "realtime pool");
289 pool->max_size = (totalSize + sizeof(FreeChunk) - 1 + B_PAGE_SIZE)
292 area_id area = create_area(name, &pool->heap_base, B_ANY_ADDRESS,
293 pool->max_size, B_LAZY_LOCK, B_READ_AREA | B_WRITE_AREA);
295 mutex_destroy(&pool->lock);
296 free(pool);
300 pool->area = area;
301 pool->available = pool->max_size - FreeChunk::NextOffset();
306 FreeChunk* chunk = (FreeChunk*)pool->heap_base;
307 chunk->SetTo(pool->max_size, NULL);
309 pool->free_anchor.SetTo(0, chunk);
311 *_pool = pool;
314 sPools.Add(pool);
320 rtm_delete_pool(rtm_pool* pool)
322 if (pool == NULL)
325 mutex_lock(&pool->lock);
329 sPools.Remove(pool);
332 delete_area(pool->area);
333 mutex_destroy(&pool->lock);
334 free(pool);
341 rtm_alloc(rtm_pool* pool, size_t size)
343 if (pool == NULL)
346 if (pool->heap_base == NULL || size == 0)
349 MutexLocker _(&pool->lock);
354 if (size > pool->available) {
359 FreeChunk* chunk = pool->free_anchor.Next();
360 FreeChunk* last = &pool->free_anchor;
381 freeChunk->Remove(pool, last);
382 freeChunk->Enqueue(pool);
389 pool->available -= size + sizeof(size_t);
404 // find pool
405 rtm_pool* pool = pool_for(allocated);
406 if (pool == NULL) {
411 MutexLocker _(&pool->lock);
412 pool->Free(allocated);
427 // find pool
428 rtm_pool* pool = pool_for(oldBuffer);
429 if (pool == NULL) {
438 MutexLocker _(&pool->lock);
442 pool->Free(oldBuffer);
462 void* newBuffer = rtm_alloc(pool, newSize);
468 pool->Free(oldBuffer);
502 rtm_available(rtm_pool* pool)
504 if (pool == NULL) {
509 return pool->available;
516 // We always return NULL - the default pool will just use malloc()/free()
526 void rtm_get_pool(rtm_pool *pool,void *data,int32 param3,int32 param4, ...);