Example #1
0
//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;
}
Example #2
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();
	}
Example #3
0
	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;
	}
Example #4
0
//release a message queue entry when done
void DoneWithMessage(psMessage_t *msg)
{
	AddToFreelist((BrokerQueueEntry_t *)msg);
}