diff options
| author | Simon Marlow <simonmar@microsoft.com> | 2006-08-25 08:44:35 +0000 | 
|---|---|---|
| committer | Simon Marlow <simonmar@microsoft.com> | 2006-08-25 08:44:35 +0000 | 
| commit | 610de7d17e09318272b7516bd9b97e8b2cbd170c (patch) | |
| tree | 68dc1bbe4707688bdc7aa74ab12ce7c591e4c64a /rts/win32/AsyncIO.c | |
| parent | edad06244b0a542d6b5c9ce3f3cd72941c5be804 (diff) | |
| download | haskell-610de7d17e09318272b7516bd9b97e8b2cbd170c.tar.gz | |
Free Win32 Handles on shutdown
patch from #878
Diffstat (limited to 'rts/win32/AsyncIO.c')
| -rw-r--r-- | rts/win32/AsyncIO.c | 17 | 
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();  }  | 
