aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/support
diff options
context:
space:
mode:
authorGravatar Craig Tiller <craig.tiller@gmail.com>2015-02-24 16:59:14 -0800
committerGravatar Craig Tiller <craig.tiller@gmail.com>2015-02-24 16:59:14 -0800
commitcb0a28eb86a22d4b220c8d025b96165cf68279f7 (patch)
treeae437050534f029f3f769e3066925b137fb72bbb /src/core/support
parenteef1103d3aa18757e95401c4c39a35d57b45ebe5 (diff)
parent085603c112d3d2daefb5c776590185e7680b6aca (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.c3
-rw-r--r--src/core/support/cpu_linux.c25
-rw-r--r--src/core/support/cpu_posix.c20
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;
}