diff options
author | 2015-02-24 16:59:14 -0800 | |
---|---|---|
committer | 2015-02-24 16:59:14 -0800 | |
commit | cb0a28eb86a22d4b220c8d025b96165cf68279f7 (patch) | |
tree | ae437050534f029f3f769e3066925b137fb72bbb /src/core/support | |
parent | eef1103d3aa18757e95401c4c39a35d57b45ebe5 (diff) | |
parent | 085603c112d3d2daefb5c776590185e7680b6aca (diff) |
Merge pull request #755 from nicolasnoble/feedback
Second batch of feedback.
Diffstat (limited to 'src/core/support')
-rw-r--r-- | src/core/support/alloc.c | 3 | ||||
-rw-r--r-- | src/core/support/cpu_linux.c | 25 | ||||
-rw-r--r-- | src/core/support/cpu_posix.c | 20 |
3 files changed, 28 insertions, 20 deletions
diff --git a/src/core/support/alloc.c b/src/core/support/alloc.c index 44f343b4f4..a19a0141d4 100644 --- a/src/core/support/alloc.c +++ b/src/core/support/alloc.c @@ -54,7 +54,8 @@ void *gpr_realloc(void *p, size_t size) { return p; } -void *gpr_malloc_aligned(size_t size, size_t alignment) { +void *gpr_malloc_aligned(size_t size, size_t alignment_log) { + size_t alignment = 1 << alignment_log; size_t extra = alignment - 1 + sizeof(void *); void *p = gpr_malloc(size + extra); void **ret = (void **)(((gpr_uintptr)p + extra) & ~(alignment - 1)); diff --git a/src/core/support/cpu_linux.c b/src/core/support/cpu_linux.c index ef6bf9ca09..37e840d4cf 100644 --- a/src/core/support/cpu_linux.c +++ b/src/core/support/cpu_linux.c @@ -39,25 +39,28 @@ #ifdef GPR_CPU_LINUX -#include <grpc/support/cpu.h> - #include <sched.h> #include <errno.h> #include <unistd.h> #include <string.h> +#include <grpc/support/cpu.h> #include <grpc/support/log.h> +#include <grpc/support/sync.h> -unsigned gpr_cpu_num_cores(void) { - static int ncpus = 0; - /* FIXME: !threadsafe */ - if (ncpus == 0) { - ncpus = sysconf(_SC_NPROCESSORS_ONLN); - if (ncpus < 1) { - gpr_log(GPR_ERROR, "Cannot determine number of CPUs: assuming 1"); - ncpus = 1; - } +static int ncpus = 0; + +static void init_num_cpus() { + ncpus = sysconf(_SC_NPROCESSORS_ONLN); + if (ncpus < 1) { + gpr_log(GPR_ERROR, "Cannot determine number of CPUs: assuming 1"); + ncpus = 1; } +} + +unsigned gpr_cpu_num_cores(void) { + static gpr_once once = GPR_ONCE_INIT; + gpr_once_init(&once, init_num_cpus); return ncpus; } diff --git a/src/core/support/cpu_posix.c b/src/core/support/cpu_posix.c index 91ce80c364..33c7b90b0b 100644 --- a/src/core/support/cpu_posix.c +++ b/src/core/support/cpu_posix.c @@ -43,15 +43,19 @@ static __thread char magic_thread_local; -unsigned gpr_cpu_num_cores(void) { - static int ncpus = 0; - if (ncpus == 0) { - ncpus = sysconf(_SC_NPROCESSORS_ONLN); - if (ncpus < 1) { - gpr_log(GPR_ERROR, "Cannot determine number of CPUs: assuming 1"); - ncpus = 1; - } +static int ncpus = 0; + +static void init_ncpus() { + ncpus = sysconf(_SC_NPROCESSORS_ONLN); + if (ncpus < 1) { + gpr_log(GPR_ERROR, "Cannot determine number of CPUs: assuming 1"); + ncpus = 1; } +} + +unsigned gpr_cpu_num_cores(void) { + static gpr_once once = GPR_ONCE_INIT; + gpr_once_init(&once, init_num_cpus); return ncpus; } |