Massive patch for the first months work adding System FC to GHC #35
[ghc-hetmet.git] / rts / win32 / AsyncIO.c
index 7bcf571..d471ee8 100644 (file)
@@ -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;
@@ -161,7 +161,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 +173,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 +311,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);
            }
        }