null+****@clear*****
null+****@clear*****
2010年 8月 9日 (月) 10:15:12 JST
Kouhei Sutou 2010-08-09 01:15:12 +0000 (Mon, 09 Aug 2010) New Revision: 545c71f6a15ca4c9bbd5ad5cafa9f9e0da2f5f00 Log: use sysctl() for getting N CPU cores as fallback. Modified files: configure.ac src/groonga.c Modified: configure.ac (+1 -1) =================================================================== --- configure.ac 2010-08-09 00:57:31 +0000 (954b67a) +++ configure.ac 2010-08-09 01:15:12 +0000 (d2407c5) @@ -120,7 +120,7 @@ AC_CONFIG_FILES([Makefile AC_CHECK_HEADERS(sys/mman.h sys/time.h sys/timeb.h sys/param.h sys/types.h pthread.h sys/resource.h) AC_CHECK_HEADERS(netdb.h sys/wait.h sys/socket.h netinet/in.h netinet/tcp.h) -AC_CHECK_HEADERS(ucontext.h signal.h errno.h execinfo.h) +AC_CHECK_HEADERS(ucontext.h signal.h errno.h execinfo.h sys/sysctl.h) AC_CHECK_FUNCS(localtime_r gmtime_r) AC_SYS_LARGEFILE AC_TYPE_OFF_T Modified: src/groonga.c (+19 -1) =================================================================== --- src/groonga.c 2010-08-09 00:57:31 +0000 (5cdc2b0) +++ src/groonga.c 2010-08-09 01:15:12 +0000 (5960c81) @@ -40,6 +40,10 @@ #include <sys/resource.h> #endif /* HAVE_SYS_RESOURCE_H */ +#ifdef HAVE_SYS_SYSCTL_H +#include <sys/sysctl.h> +#endif /* HAVE_SYS_SYSCTL_H */ + #ifndef USE_MSG_NOSIGNAL #define MSG_NOSIGNAL 0 #endif /* USE_MSG_NOSIGNAL */ @@ -1926,7 +1930,7 @@ enum { grn_logger_info_set(&grn_gctx, &info);\ } while(0) -uint32_t +static uint32_t get_core_number(void) { #ifdef WIN32 @@ -1934,7 +1938,21 @@ get_core_number(void) GetSystemInfo(&sinfo); return sinfo.dwNumberOfProcessors; #else /* WIN32 */ +# ifdef _SC_NPROCESSORS_CONF return sysconf(_SC_NPROCESSORS_CONF); +# else + int n_processors; + size_t length = sizeof(n_processors); + int mib[] = {CTL_HW, HW_NCPU}; + if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), + &n_processors, &length, NULL, 0) == 0 && + length == sizeof(n_processors) && + 0 < n_processors) { + return n_processors; + } else { + return 1; + } +# endif /* _SC_NPROCESSORS_CONF */ #endif /* WIN32 */ }