Add getNumberOfProcessors(), FIX MacOS X build problem (hopefully)
authorSimon Marlow <marlowsd@gmail.com>
Tue, 17 Mar 2009 09:33:09 +0000 (09:33 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Tue, 17 Mar 2009 09:33:09 +0000 (09:33 +0000)
Somebody needs to implement getNumberOfProcessors() for MacOS X,
currently it will return 1.

includes/OSThreads.h
rts/RtsFlags.c
rts/posix/OSThreads.c
rts/win32/OSThreads.c

index d4dbc36..73ef4d2 100644 (file)
@@ -185,6 +185,9 @@ void *getThreadLocalVar (ThreadLocalKey *key);
 void  setThreadLocalVar (ThreadLocalKey *key, void *value);
 void  freeThreadLocalKey (ThreadLocalKey *key);
 
 void  setThreadLocalVar (ThreadLocalKey *key, void *value);
 void  freeThreadLocalKey (ThreadLocalKey *key);
 
+// Processors and affinity
+nat getNumberOfProcessors (void);
+
 #endif // !CMINUSMINUS
 
 #else
 #endif // !CMINUSMINUS
 
 #else
index 2af67e7..b3b95b3 100644 (file)
@@ -1152,17 +1152,7 @@ error = rtsTrue;
 #if defined(PROFILING)
                    RtsFlags.ParFlags.nNodes = 1;
 #else
 #if defined(PROFILING)
                    RtsFlags.ParFlags.nNodes = 1;
 #else
-#if defined(mingw32_HOST_OS)
-                    {
-                        SYSTEM_INFO si;
-                        GetSystemInfo(&si);
-                        RtsFlags.ParFlags.nNodes = si.dwNumberOfProcessors;
-                    }
-#elif defined(HAVE_SYSCONF)
-                    RtsFlags.ParFlags.nNodes = sysconf(_SC_NPROCESSORS_CONF);
-#else
-                    RtsFlags.ParFlags.nNodes = 1;
-#endif
+                    RtsFlags.ParFlags.nNodes = getNumberOfProcessors();
 #endif
                } else {
                    RtsFlags.ParFlags.nNodes
 #endif
                } else {
                    RtsFlags.ParFlags.nNodes
index 6e01f82..6eb2d2b 100644 (file)
@@ -179,6 +179,24 @@ forkOS_createThread ( HsStablePtr entry )
     return result;
 }
 
     return result;
 }
 
+nat
+getNumberOfProcessors (void)
+{
+    static nat nproc = 0;
+
+    if (nproc == 0) {
+#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
+        nproc = sysconf(_SC_NPROCESSORS_ONLN);
+#elif defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF)
+        nproc = sysconf(_SC_NPROCESSORS_CONF);
+#else
+        nproc = 1;
+#endif
+    }
+
+    return nproc;
+}
+
 #else /* !defined(THREADED_RTS) */
 
 int
 #else /* !defined(THREADED_RTS) */
 
 int
index ed5c968..929b817 100644 (file)
@@ -232,6 +232,20 @@ forkOS_createThread ( HsStablePtr entry )
                           (unsigned*)&pId) == 0);
 }
 
                           (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
 #else /* !defined(THREADED_RTS) */
 
 int