X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fwin32%2FAsyncIO.c;h=20de8bb4abd73804d18d4b58dd257be31732c649;hb=eb64777602e77588cb781865f742fa23fad06d08;hp=2ff92d96424ce97321f6d7e3a289236ab130f247;hpb=aba81b16e17d8dbd3081d20e062dbc8f9e2f783b;p=ghc-hetmet.git diff --git a/rts/win32/AsyncIO.c b/rts/win32/AsyncIO.c index 2ff92d9..20de8bb 100644 --- a/rts/win32/AsyncIO.c +++ b/rts/win32/AsyncIO.c @@ -4,6 +4,9 @@ * * (c) sof, 2002-2003. */ + +#if !defined(THREADED_RTS) + #include "Rts.h" #include "RtsUtils.h" #include @@ -45,8 +48,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; @@ -171,10 +174,21 @@ startupAsyncIO() } void -shutdownAsyncIO() +shutdownAsyncIO(rtsBool wait_threads) { - CloseHandle(completed_req_event); - ShutdownIOManager(); + ShutdownIOManager(wait_threads); + 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; + } } /* @@ -343,3 +357,4 @@ resetAbandonRequestWait( void ) ResetEvent(abandon_req_wait); } +#endif /* !defined(THREADED_RTS) */