summaryrefslogtreecommitdiff
path: root/thread-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'thread-utils.c')
-rw-r--r--thread-utils.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/thread-utils.c b/thread-utils.c
index 589f838f82..a2135e0743 100644
--- a/thread-utils.c
+++ b/thread-utils.c
@@ -1,5 +1,5 @@
#include "cache.h"
-#include <pthread.h>
+#include "thread-utils.h"
#if defined(hpux) || defined(__hpux) || defined(_hpux)
# include <sys/pstat.h>
@@ -24,7 +24,7 @@ int online_cpus(void)
long ncpus;
#endif
-#ifdef _WIN32
+#ifdef GIT_WINDOWS_NATIVE
SYSTEM_INFO info;
GetSystemInfo(&info);
@@ -35,7 +35,23 @@ int online_cpus(void)
if (!pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0))
return (int)psd.psd_proc_cnt;
-#endif
+#elif defined(HAVE_BSD_SYSCTL) && defined(HW_NCPU)
+ int mib[2];
+ size_t len;
+ int cpucount;
+
+ mib[0] = CTL_HW;
+# ifdef HW_AVAILCPU
+ mib[1] = HW_AVAILCPU;
+ len = sizeof(cpucount);
+ if (!sysctl(mib, 2, &cpucount, &len, NULL, 0))
+ return cpucount;
+# endif /* HW_AVAILCPU */
+ mib[1] = HW_NCPU;
+ len = sizeof(cpucount);
+ if (!sysctl(mib, 2, &cpucount, &len, NULL, 0))
+ return cpucount;
+#endif /* defined(HAVE_BSD_SYSCTL) && defined(HW_NCPU) */
#ifdef _SC_NPROCESSORS_ONLN
if ((ncpus = (long)sysconf(_SC_NPROCESSORS_ONLN)) > 0)