示例#1
0
void StreamPool_Return(wStreamPool* pool, wStream* s)
{
	if (pool->synchronized)
		WaitForSingleObject(pool->mutex, INFINITE);

	if ((pool->aSize + 1) >= pool->aCapacity)
	{
		pool->aCapacity *= 2;
		pool->aArray = (wStream**) realloc(pool->aArray, sizeof(wStream*) * pool->aCapacity);
	}

	pool->aArray[(pool->aSize)++] = s;
	StreamPool_RemoveUsed(pool, s);

	if (pool->synchronized)
		ReleaseMutex(pool->mutex);
}
示例#2
0
void StreamPool_Return(wStreamPool* pool, wStream* s)
{
	if (pool->synchronized)
		EnterCriticalSection(&pool->lock);

	if ((pool->aSize + 1) >= pool->aCapacity)
	{
		pool->aCapacity *= 2;
		pool->aArray = (wStream**) realloc(pool->aArray, sizeof(wStream*) * pool->aCapacity);
	}

	pool->aArray[(pool->aSize)++] = s;
	StreamPool_RemoveUsed(pool, s);

	if (pool->synchronized)
		LeaveCriticalSection(&pool->lock);
}
示例#3
0
void StreamPool_Return(wStreamPool* pool, wStream* s)
{
	if (pool->synchronized)
		EnterCriticalSection(&pool->lock);

	if ((pool->aSize + 1) >= pool->aCapacity)
	{
		int new_cap;
		wStream **new_arr;

		new_cap = pool->aCapacity * 2;
		new_arr = (wStream**) realloc(pool->aArray, sizeof(wStream*) * new_cap);
		if (!new_arr)
			goto out_fail;
		pool->aCapacity = new_cap;
		pool->aArray = new_arr;
	}
	else if ((pool->aSize + 1) * 3 < pool->aCapacity)
	{
		int new_cap;
		wStream **new_arr;

		new_cap = pool->aCapacity / 2;
		new_arr = (wStream**) realloc(pool->aArray, sizeof(wStream*) * new_cap);
		if (!new_arr)
			goto out_fail;
		pool->aCapacity = new_cap;
		pool->aArray = new_arr;
	}

	pool->aArray[(pool->aSize)++] = s;
	StreamPool_RemoveUsed(pool, s);

out_fail:
	if (pool->synchronized)
		LeaveCriticalSection(&pool->lock);
}