Add getNumberOfProcessors(), FIX MacOS X build problem (hopefully)
[ghc-hetmet.git] / rts / win32 / OSThreads.c
index 6f3629b..929b817 100644 (file)
@@ -13,6 +13,7 @@
 #if defined(THREADED_RTS)
 #include "OSThreads.h"
 #include "RtsUtils.h"
+#include <windows.h>
 
 /* For reasons not yet clear, the entire contents of process.h is protected 
  * by __STRICT_ANSI__ not being defined.
@@ -197,6 +198,17 @@ setThreadLocalVar (ThreadLocalKey *key, void *value)
     }
 }
 
+void
+freeThreadLocalKey (ThreadLocalKey *key)
+{
+    BOOL r;
+    r = TlsFree(*key);
+    if (r == 0) {
+        DWORD dw = GetLastError();
+       barf("freeThreadLocalKey failed: %lu", dw);
+    }
+}
+
 
 static unsigned __stdcall
 forkOS_createThreadWrapper ( void * entry )
@@ -220,6 +232,20 @@ forkOS_createThread ( HsStablePtr entry )
                           (unsigned*)&pId) == 0);
 }
 
+nat
+getNumberOfProcessors (void)
+{
+    static nat nproc = 0;
+
+    if (nproc == 0) {
+        SYSTEM_INFO si;
+        GetSystemInfo(&si);
+        nproc = si.dwNumberOfProcessors;
+    }
+
+    return nproc;
+}
+
 #else /* !defined(THREADED_RTS) */
 
 int