return wq;
}
- wq->head = 0;
- wq->tail = 0;
+ memset(wq, 0, sizeof *wq);
InitializeCriticalSection(&wq->queueLock);
wq->workAvailable = newSemaphore(0, WORKQUEUE_SIZE);
void
FreeWorkQueue ( WorkQueue* pq )
{
+ int i;
+
+ /* Free any remaining work items. */
+ for (i = 0; i < WORKQUEUE_SIZE; i++) {
+ if (pq->items[i] != NULL) {
+ free(pq->items[i]);
+ }
+ }
+
/* Close the semaphores; any threads blocked waiting
* on either will as a result be woken up.
*/
CloseHandle(pq->workAvailable);
}
if ( pq->roomAvailable ) {
- CloseHandle(pq->workAvailable);
+ CloseHandle(pq->roomAvailable);
}
+ DeleteCriticalSection(&pq->queueLock);
free(pq);
return;
}