diff --git a/configure.ac b/configure.ac index 75425464..8309be4a 100644 --- a/configure.ac +++ b/configure.ac @@ -1963,6 +1963,15 @@ dnl Check if we have dlsym support. fi fi +dnl Check if pthread_getaffinity_np exists (does not on GNU Hurd) +AC_CHECK_FUNC([pthread_getaffinity_np], + [have_pthread_getaffinity_np="1"], + [have_pthread_getaffinity_np="0"] + ) +if test "x$have_pthread_getaffinity_np" = "x1" ; then + AC_DEFINE([JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP], [ ]) +fi + JE_APPEND_VS(CPPFLAGS, -D_REENTRANT) dnl Check whether clock_gettime(2) is in libc or librt. diff --git a/src/background_thread.c b/src/background_thread.c index 1d5bde6c..25cc141d 100644 --- a/src/background_thread.c +++ b/src/background_thread.c @@ -116,7 +116,7 @@ set_current_thread_affinity(int cpu) { #if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) || defined(JEMALLOC_HAVE_PTHREAD_SETAFFINITY_NP) #if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) cpu_set_t cpuset; -#else +#elif defined(JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP) # ifndef __NetBSD__ cpuset_t cpuset; # else @@ -124,16 +124,20 @@ set_current_thread_affinity(int cpu) { # endif #endif +#if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) || defined(JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP) #ifndef __NetBSD__ CPU_ZERO(&cpuset); CPU_SET(cpu, &cpuset); #else cpuset = cpuset_create(); #endif +#else + return 1; +#endif #if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) return (sched_setaffinity(0, sizeof(cpu_set_t), &cpuset) != 0); -#else +#elif defined(JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP) # ifndef __NetBSD__ int ret = pthread_setaffinity_np(pthread_self(), sizeof(cpuset_t), &cpuset); diff --git a/src/jemalloc.c b/src/jemalloc.c index 37cd159c..736e2e50 100644 --- a/src/jemalloc.c +++ b/src/jemalloc.c @@ -747,8 +747,11 @@ malloc_ncpus(void) { # endif # if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) sched_getaffinity(0, sizeof(set), &set); -# else +# elif defined(JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP) pthread_getaffinity_np(pthread_self(), sizeof(set), &set); +# else + CPU_ZERO(&set); + CPU_SET(0, &set); # endif result = CPU_COUNT(&set); } @@ -784,8 +787,11 @@ malloc_cpu_count_is_deterministic() # endif /* __FreeBSD__ */ # if defined(JEMALLOC_HAVE_SCHED_SETAFFINITY) sched_getaffinity(0, sizeof(set), &set); -# else /* !JEMALLOC_HAVE_SCHED_SETAFFINITY */ +# elif defined(JEMALLOC_HAVE_PTHREAD_GETAFFINITY_NP) pthread_getaffinity_np(pthread_self(), sizeof(set), &set); +# else + CPU_ZERO(&set); + CPU_SET(0, &set); # endif /* JEMALLOC_HAVE_SCHED_SETAFFINITY */ long cpu_affinity = CPU_COUNT(&set); if (cpu_affinity != cpu_conf) {