summaryrefslogtreecommitdiffstats
path: root/jemalloc/test
diff options
context:
space:
mode:
authorJason Evans <je@fb.com>2011-03-14 18:39:49 (GMT)
committerJason Evans <je@fb.com>2011-03-14 18:43:54 (GMT)
commita7153a0d7d5f1c81edf4a8087353cc095819b78c (patch)
tree95624ee7b03f545987ceb7da236b56c1cbf2c8ed /jemalloc/test
parent814b9bda7f17cbedac9969e3526736e85c5f2077 (diff)
downloadjemalloc-a7153a0d7d5f1c81edf4a8087353cc095819b78c.zip
jemalloc-a7153a0d7d5f1c81edf4a8087353cc095819b78c.tar.gz
jemalloc-a7153a0d7d5f1c81edf4a8087353cc095819b78c.tar.bz2
Fix a "thread.arena" mallctl bug.
Fix a variable reversal bug in mallctl("thread.arena", ...).
Diffstat (limited to 'jemalloc/test')
-rw-r--r--jemalloc/test/thread_arena.c38
1 files changed, 24 insertions, 14 deletions
diff --git a/jemalloc/test/thread_arena.c b/jemalloc/test/thread_arena.c
index bd884e1..ef8d681 100644
--- a/jemalloc/test/thread_arena.c
+++ b/jemalloc/test/thread_arena.c
@@ -2,10 +2,13 @@
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
+#include <assert.h>
#define JEMALLOC_MANGLE
#include "jemalloc_test.h"
+#define NTHREADS 10
+
void *
thread_start(void *arg)
{
@@ -29,6 +32,15 @@ thread_start(void *arg)
return (void *)1;
}
+ size = sizeof(arena_ind);
+ if ((err = JEMALLOC_P(mallctl)("thread.arena", &arena_ind, &size, NULL,
+ 0))) {
+ fprintf(stderr, "%s(): Error in mallctl(): %s\n", __func__,
+ strerror(err));
+ return (void *)1;
+ }
+ assert(arena_ind == main_arena_ind);
+
return (NULL);
}
@@ -40,7 +52,8 @@ main(void)
unsigned arena_ind;
size_t size;
int err;
- pthread_t thread;
+ pthread_t threads[NTHREADS];
+ unsigned i;
fprintf(stderr, "Test begin\n");
@@ -60,21 +73,18 @@ main(void)
goto RETURN;
}
- if (pthread_create(&thread, NULL, thread_start, (void *)&arena_ind)
- != 0) {
- fprintf(stderr, "%s(): Error in pthread_create()\n", __func__);
- ret = 1;
- goto RETURN;
+ for (i = 0; i < NTHREADS; i++) {
+ if (pthread_create(&threads[i], NULL, thread_start,
+ (void *)&arena_ind) != 0) {
+ fprintf(stderr, "%s(): Error in pthread_create()\n",
+ __func__);
+ ret = 1;
+ goto RETURN;
+ }
}
- pthread_join(thread, (void *)&ret);
- if (pthread_create(&thread, NULL, thread_start, (void *)&arena_ind)
- != 0) {
- fprintf(stderr, "%s(): Error in pthread_create()\n", __func__);
- ret = 1;
- goto RETURN;
- }
- pthread_join(thread, (void *)&ret);
+ for (i = 0; i < NTHREADS; i++)
+ pthread_join(threads[i], (void *)&ret);
RETURN:
fprintf(stderr, "Test end\n");