1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/memory/jemalloc/src/test/thread_arena.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,80 @@ 1.4 +#define JEMALLOC_MANGLE 1.5 +#include "jemalloc_test.h" 1.6 + 1.7 +#define NTHREADS 10 1.8 + 1.9 +void * 1.10 +je_thread_start(void *arg) 1.11 +{ 1.12 + unsigned main_arena_ind = *(unsigned *)arg; 1.13 + void *p; 1.14 + unsigned arena_ind; 1.15 + size_t size; 1.16 + int err; 1.17 + 1.18 + p = malloc(1); 1.19 + if (p == NULL) { 1.20 + malloc_printf("%s(): Error in malloc()\n", __func__); 1.21 + return (void *)1; 1.22 + } 1.23 + 1.24 + size = sizeof(arena_ind); 1.25 + if ((err = mallctl("thread.arena", &arena_ind, &size, &main_arena_ind, 1.26 + sizeof(main_arena_ind)))) { 1.27 + malloc_printf("%s(): Error in mallctl(): %s\n", __func__, 1.28 + strerror(err)); 1.29 + return (void *)1; 1.30 + } 1.31 + 1.32 + size = sizeof(arena_ind); 1.33 + if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 1.34 + 0))) { 1.35 + malloc_printf("%s(): Error in mallctl(): %s\n", __func__, 1.36 + strerror(err)); 1.37 + return (void *)1; 1.38 + } 1.39 + assert(arena_ind == main_arena_ind); 1.40 + 1.41 + return (NULL); 1.42 +} 1.43 + 1.44 +int 1.45 +main(void) 1.46 +{ 1.47 + int ret = 0; 1.48 + void *p; 1.49 + unsigned arena_ind; 1.50 + size_t size; 1.51 + int err; 1.52 + je_thread_t threads[NTHREADS]; 1.53 + unsigned i; 1.54 + 1.55 + malloc_printf("Test begin\n"); 1.56 + 1.57 + p = malloc(1); 1.58 + if (p == NULL) { 1.59 + malloc_printf("%s(): Error in malloc()\n", __func__); 1.60 + ret = 1; 1.61 + goto label_return; 1.62 + } 1.63 + 1.64 + size = sizeof(arena_ind); 1.65 + if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) { 1.66 + malloc_printf("%s(): Error in mallctl(): %s\n", __func__, 1.67 + strerror(err)); 1.68 + ret = 1; 1.69 + goto label_return; 1.70 + } 1.71 + 1.72 + for (i = 0; i < NTHREADS; i++) { 1.73 + je_thread_create(&threads[i], je_thread_start, 1.74 + (void *)&arena_ind); 1.75 + } 1.76 + 1.77 + for (i = 0; i < NTHREADS; i++) 1.78 + je_thread_join(threads[i], (void *)&ret); 1.79 + 1.80 +label_return: 1.81 + malloc_printf("Test end\n"); 1.82 + return (ret); 1.83 +}