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); }
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); }
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); }