X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fwin32%2FAsyncIO.c;h=cd0cf38bab2a176b75051a7e3410eaa29a8cf80f;hb=de6c8e5293c9ef68b597ab2e6d55c3f42a283489;hp=7bcf571cf8f83a8e475c2d651429bc78111bf320;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/rts/win32/AsyncIO.c b/rts/win32/AsyncIO.c index 7bcf571..cd0cf38 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; @@ -161,7 +164,7 @@ startupAsyncIO() completed_hw = 0; if ( !(completed_table_sema = CreateSemaphore (NULL, MAX_REQUESTS, MAX_REQUESTS, NULL)) ) { DWORD rc = GetLastError(); - fprintf(stderr, "startupAsyncIO: CreateSemaphore failed 0x%x\n", rc); + fprintf(stderr, "startupAsyncIO: CreateSemaphore failed 0x%x\n", (int)rc); fflush(stderr); } @@ -173,8 +176,19 @@ startupAsyncIO() void shutdownAsyncIO() { - CloseHandle(completed_req_event); ShutdownIOManager(); + 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; + } } /* @@ -300,7 +314,7 @@ start: /* Signal that there's completed table slots available */ if ( !ReleaseSemaphore(completed_table_sema, 1, NULL) ) { DWORD dw = GetLastError(); - fprintf(stderr, "awaitRequests: failed to signal semaphore (error code=0x%x)\n", dw); + fprintf(stderr, "awaitRequests: failed to signal semaphore (error code=0x%x)\n", (int)dw); fflush(stderr); } } @@ -343,3 +357,4 @@ resetAbandonRequestWait( void ) ResetEvent(abandon_req_wait); } +#endif /* !defined(THREADED_RTS) */