summaryrefslogtreecommitdiff
path: root/rts/win32/AsyncIO.c
diff options
context:
space:
mode:
authorSimon Marlow <simonmar@microsoft.com>2006-08-25 08:44:35 +0000
committerSimon Marlow <simonmar@microsoft.com>2006-08-25 08:44:35 +0000
commit610de7d17e09318272b7516bd9b97e8b2cbd170c (patch)
tree68dc1bbe4707688bdc7aa74ab12ce7c591e4c64a /rts/win32/AsyncIO.c
parentedad06244b0a542d6b5c9ce3f3cd72941c5be804 (diff)
downloadhaskell-610de7d17e09318272b7516bd9b97e8b2cbd170c.tar.gz
Free Win32 Handles on shutdown
patch from #878
Diffstat (limited to 'rts/win32/AsyncIO.c')
-rw-r--r--rts/win32/AsyncIO.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/rts/win32/AsyncIO.c b/rts/win32/AsyncIO.c
index 2ff92d9642..3f99113b7f 100644
--- a/rts/win32/AsyncIO.c
+++ b/rts/win32/AsyncIO.c
@@ -45,8 +45,8 @@ typedef struct CompletedReq {
#define MAX_REQUESTS 200
static CRITICAL_SECTION queue_lock;
-static HANDLE completed_req_event;
-static HANDLE abandon_req_wait;
+static HANDLE completed_req_event = INVALID_HANDLE_VALUE;
+static HANDLE abandon_req_wait = INVALID_HANDLE_VALUE;
static HANDLE wait_handles[2];
static CompletedReq completedTable[MAX_REQUESTS];
static int completed_hw;
@@ -173,7 +173,18 @@ startupAsyncIO()
void
shutdownAsyncIO()
{
- CloseHandle(completed_req_event);
+ if (completed_req_event != INVALID_HANDLE_VALUE) {
+ CloseHandle(completed_req_event);
+ completed_req_event = INVALID_HANDLE_VALUE;
+ }
+ if (abandon_req_wait != INVALID_HANDLE_VALUE) {
+ CloseHandle(abandon_req_wait);
+ abandon_req_wait = INVALID_HANDLE_VALUE;
+ }
+ if (completed_table_sema != NULL) {
+ CloseHandle(completed_table_sema);
+ completed_table_sema = NULL;
+ }
ShutdownIOManager();
}