summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Evans <je@fb.com>2011-11-06 04:50:15 (GMT)
committerJason Evans <je@fb.com>2011-11-06 04:50:15 (GMT)
commitd1c526d53b613474975ccd0124e3150f54a991d1 (patch)
tree218bbb5b2287b3621d50a2bb78a195dfa0a5e7eb
parent5bdbae57eecd92755be8e7a59d6ff8b46f50e6ad (diff)
parent45e040a82c121fb74337b61b3d8597b028b2dd32 (diff)
downloadjemalloc-2.2.4.zip
jemalloc-2.2.4.tar.gz
jemalloc-2.2.4.tar.bz2
Merge branch '2_2_4_bp'2.2.4
-rw-r--r--ChangeLog7
-rw-r--r--src/jemalloc.c18
-rw-r--r--test/rallocm.c18
3 files changed, 30 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 66032b2..6197968 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,13 @@ found in the git revision history:
http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git
git://canonware.com/jemalloc.git
+* 2.2.4 (November 5, 2011)
+
+ Bug fixes:
+ - Initialize arenas_tsd before using it. This bug existed for 2.2.[0-3], as
+ well as for --disable-tls builds in earlier releases.
+ - Do not assume a 4 KiB page size in test/rallocm.c.
+
* 2.2.3 (August 31, 2011)
This version fixes numerous bugs related to heap profiling.
diff --git a/src/jemalloc.c b/src/jemalloc.c
index fd8bf52..a161c2e 100644
--- a/src/jemalloc.c
+++ b/src/jemalloc.c
@@ -689,7 +689,7 @@ malloc_init_hard(void)
result = sysconf(_SC_PAGESIZE);
assert(result != -1);
- pagesize = (unsigned)result;
+ pagesize = (size_t)result;
/*
* We assume that pagesize is a power of 2 when calculating
@@ -769,6 +769,14 @@ malloc_init_hard(void)
}
#endif
+ if (malloc_mutex_init(&arenas_lock))
+ return (true);
+
+ if (pthread_key_create(&arenas_tsd, arenas_cleanup) != 0) {
+ malloc_mutex_unlock(&init_lock);
+ return (true);
+ }
+
/*
* Create enough scaffolding to allow recursive allocation in
* malloc_ncpus().
@@ -795,14 +803,6 @@ malloc_init_hard(void)
ARENA_SET(arenas[0]);
arenas[0]->nthreads++;
- if (malloc_mutex_init(&arenas_lock))
- return (true);
-
- if (pthread_key_create(&arenas_tsd, arenas_cleanup) != 0) {
- malloc_mutex_unlock(&init_lock);
- return (true);
- }
-
#ifdef JEMALLOC_PROF
if (prof_boot2()) {
malloc_mutex_unlock(&init_lock);
diff --git a/test/rallocm.c b/test/rallocm.c
index a8cadeb..ccf326b 100644
--- a/test/rallocm.c
+++ b/test/rallocm.c
@@ -1,6 +1,8 @@
#include <stdio.h>
#include <stdlib.h>
+#include <unistd.h>
#include <string.h>
+#include <assert.h>
#define JEMALLOC_MANGLE
#include "jemalloc_test.h"
@@ -8,12 +10,20 @@
int
main(void)
{
+ size_t pagesize;
void *p, *q;
size_t sz, tsz;
int r;
fprintf(stderr, "Test begin\n");
+ /* Get page size. */
+ {
+ long result = sysconf(_SC_PAGESIZE);
+ assert(result != -1);
+ pagesize = (size_t)result;
+ }
+
r = JEMALLOC_P(allocm)(&p, &sz, 42, 0);
if (r != ALLOCM_SUCCESS) {
fprintf(stderr, "Unexpected allocm() error\n");
@@ -66,7 +76,7 @@ main(void)
p = q;
sz = tsz;
- r = JEMALLOC_P(rallocm)(&q, &tsz, 8192, 0, 0);
+ r = JEMALLOC_P(rallocm)(&q, &tsz, pagesize*2, 0, 0);
if (r != ALLOCM_SUCCESS)
fprintf(stderr, "Unexpected rallocm() error\n");
if (q == p)
@@ -78,7 +88,7 @@ main(void)
p = q;
sz = tsz;
- r = JEMALLOC_P(rallocm)(&q, &tsz, 16384, 0, 0);
+ r = JEMALLOC_P(rallocm)(&q, &tsz, pagesize*4, 0, 0);
if (r != ALLOCM_SUCCESS)
fprintf(stderr, "Unexpected rallocm() error\n");
if (tsz == sz) {
@@ -88,7 +98,7 @@ main(void)
p = q;
sz = tsz;
- r = JEMALLOC_P(rallocm)(&q, &tsz, 8192, 0, ALLOCM_NO_MOVE);
+ r = JEMALLOC_P(rallocm)(&q, &tsz, pagesize*2, 0, ALLOCM_NO_MOVE);
if (r != ALLOCM_SUCCESS)
fprintf(stderr, "Unexpected rallocm() error\n");
if (q != p)
@@ -99,7 +109,7 @@ main(void)
}
sz = tsz;
- r = JEMALLOC_P(rallocm)(&q, &tsz, 16384, 0, ALLOCM_NO_MOVE);
+ r = JEMALLOC_P(rallocm)(&q, &tsz, pagesize*4, 0, ALLOCM_NO_MOVE);
if (r != ALLOCM_SUCCESS)
fprintf(stderr, "Unexpected rallocm() error\n");
if (q != p)