//pre-allocate some entries on init int BrokerQueueInit(int pre) { int i; for (i=0; i<pre; i++) { BrokerQueueEntry_t *entry = NewQueueEntry(); if (entry == NULL) return -1; AddToFreelist(entry); } return 0; }
void Deallocate(u8* p, size_t size) { ENSURE((uintptr_t)p % allocationAlignment == 0); ENSURE(IsValidSize(size)); ENSURE(pool_contains(&m_pool, p)); ENSURE(pool_contains(&m_pool, p+size-1)); Validate(); m_stats.OnDeallocate(size); Coalesce(p, size); AddToFreelist(p, size); Validate(); }
void* TakeAndSplitFreeBlock(size_t size) { u8* p; size_t leftoverSize = 0; { FreedBlock* freedBlock = m_segregatedRangeLists.Find(size); if(!freedBlock) return 0; p = (u8*)freedBlock; leftoverSize = freedBlock->Size() - size; RemoveFromFreelist(freedBlock); } if(IsValidSize(leftoverSize)) AddToFreelist(p+size, leftoverSize); return p; }
//release a message queue entry when done void DoneWithMessage(psMessage_t *msg) { AddToFreelist((BrokerQueueEntry_t *)msg); }