projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed warnings in simplStg/StgStats, except for incomplete pattern matches
[ghc-hetmet.git]
/
rts
/
win32
/
WorkQueue.c
diff --git
a/rts/win32/WorkQueue.c
b/rts/win32/WorkQueue.c
index
85a2360
..
b676072
100644
(file)
--- a/
rts/win32/WorkQueue.c
+++ b/
rts/win32/WorkQueue.c
@@
-45,8
+45,7
@@
NewWorkQueue()
return wq;
}
return wq;
}
- wq->head = 0;
- wq->tail = 0;
+ memset(wq, 0, sizeof *wq);
InitializeCriticalSection(&wq->queueLock);
wq->workAvailable = newSemaphore(0, WORKQUEUE_SIZE);
InitializeCriticalSection(&wq->queueLock);
wq->workAvailable = newSemaphore(0, WORKQUEUE_SIZE);
@@
-65,6
+64,15
@@
NewWorkQueue()
void
FreeWorkQueue ( WorkQueue* pq )
{
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.
*/
/* Close the semaphores; any threads blocked waiting
* on either will as a result be woken up.
*/
@@
-72,8
+80,9
@@
FreeWorkQueue ( WorkQueue* pq )
CloseHandle(pq->workAvailable);
}
if ( pq->roomAvailable ) {
CloseHandle(pq->workAvailable);
}
if ( pq->roomAvailable ) {
- CloseHandle(pq->workAvailable);
+ CloseHandle(pq->roomAvailable);
}
}
+ DeleteCriticalSection(&pq->queueLock);
free(pq);
return;
}
free(pq);
return;
}