summaryrefslogtreecommitdiffstats
path: root/src/jemalloc.c
diff options
context:
space:
mode:
authorJason Evans <je@fb.com>2012-04-05 18:06:23 (GMT)
committerJason Evans <je@fb.com>2012-04-05 18:06:23 (GMT)
commit02b231205e802a7c4f33899a569adcb1312a85d5 (patch)
treec563539af0b6bcaad07bde059f373481c36bc8d8 /src/jemalloc.c
parentf3ca7c8386f6a21347aed68053117c2c59939551 (diff)
downloadjemalloc-02b231205e802a7c4f33899a569adcb1312a85d5.zip
jemalloc-02b231205e802a7c4f33899a569adcb1312a85d5.tar.gz
jemalloc-02b231205e802a7c4f33899a569adcb1312a85d5.tar.bz2
Fix threaded initialization and enable it on Linux.
Reported by Mike Hommey.
Diffstat (limited to 'src/jemalloc.c')
-rw-r--r--src/jemalloc.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/jemalloc.c b/src/jemalloc.c
index 690cf08..a531a21 100644
--- a/src/jemalloc.c
+++ b/src/jemalloc.c
@@ -36,13 +36,15 @@ static bool malloc_initialized = false;
#ifdef JEMALLOC_THREADED_INIT
/* Used to let the initializing thread recursively allocate. */
-static pthread_t malloc_initializer = (unsigned long)0;
+# define NO_INITIALIZER ((unsigned long)0)
# define INITIALIZER pthread_self()
# define IS_INITIALIZER (malloc_initializer == pthread_self())
+static pthread_t malloc_initializer = NO_INITIALIZER;
#else
-static bool malloc_initializer = false;
+# define NO_INITIALIZER false
# define INITIALIZER true
# define IS_INITIALIZER malloc_initializer
+static bool malloc_initializer = NO_INITIALIZER;
#endif
/* Used to avoid initialization races. */
@@ -531,7 +533,7 @@ malloc_init_hard(void)
return (false);
}
#ifdef JEMALLOC_THREADED_INIT
- if (IS_INITIALIZER == false) {
+ if (malloc_initializer != NO_INITIALIZER && IS_INITIALIZER == false) {
/* Busy-wait until the initializing thread completes. */
do {
malloc_mutex_unlock(&init_lock);