diff options
author | Jason Evans <je@fb.com> | 2011-03-14 18:39:49 (GMT) |
---|---|---|
committer | Jason Evans <je@fb.com> | 2011-03-14 18:43:54 (GMT) |
commit | a7153a0d7d5f1c81edf4a8087353cc095819b78c (patch) | |
tree | 95624ee7b03f545987ceb7da236b56c1cbf2c8ed /jemalloc/test | |
parent | 814b9bda7f17cbedac9969e3526736e85c5f2077 (diff) | |
download | jemalloc-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.c | 38 |
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"); |