Skip to content

Commit

Permalink
thread-utils.c: detect CPU count on older BSD-like systems
Browse files Browse the repository at this point in the history
Not all systems support using sysconf to detect the number
of available CPU cores.  Older BSD and BSD-derived systems
only provide the information via the sysctl function.

If HAVE_BSD_SYSCTL is defined attempt to retrieve the number
of available CPU cores using the sysctl function.

If HAVE_BSD_SYSCTL is not defined or the sysctl function
fails, we still attempt to get the information via sysconf.

Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
mackyle authored and gitster committed Mar 10, 2015
1 parent 9529080 commit a25b5a3
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion thread-utils.c
Expand Up @@ -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)
Expand Down

0 comments on commit a25b5a3

Please sign in to comment.