michael@0: #define JEMALLOC_MANGLE michael@0: #include "jemalloc_test.h" michael@0: michael@0: #define NTHREADS 10 michael@0: michael@0: void * michael@0: je_thread_start(void *arg) michael@0: { michael@0: unsigned main_arena_ind = *(unsigned *)arg; michael@0: void *p; michael@0: unsigned arena_ind; michael@0: size_t size; michael@0: int err; michael@0: michael@0: p = malloc(1); michael@0: if (p == NULL) { michael@0: malloc_printf("%s(): Error in malloc()\n", __func__); michael@0: return (void *)1; michael@0: } michael@0: michael@0: size = sizeof(arena_ind); michael@0: if ((err = mallctl("thread.arena", &arena_ind, &size, &main_arena_ind, michael@0: sizeof(main_arena_ind)))) { michael@0: malloc_printf("%s(): Error in mallctl(): %s\n", __func__, michael@0: strerror(err)); michael@0: return (void *)1; michael@0: } michael@0: michael@0: size = sizeof(arena_ind); michael@0: if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, michael@0: 0))) { michael@0: malloc_printf("%s(): Error in mallctl(): %s\n", __func__, michael@0: strerror(err)); michael@0: return (void *)1; michael@0: } michael@0: assert(arena_ind == main_arena_ind); michael@0: michael@0: return (NULL); michael@0: } michael@0: michael@0: int michael@0: main(void) michael@0: { michael@0: int ret = 0; michael@0: void *p; michael@0: unsigned arena_ind; michael@0: size_t size; michael@0: int err; michael@0: je_thread_t threads[NTHREADS]; michael@0: unsigned i; michael@0: michael@0: malloc_printf("Test begin\n"); michael@0: michael@0: p = malloc(1); michael@0: if (p == NULL) { michael@0: malloc_printf("%s(): Error in malloc()\n", __func__); michael@0: ret = 1; michael@0: goto label_return; michael@0: } michael@0: michael@0: size = sizeof(arena_ind); michael@0: if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) { michael@0: malloc_printf("%s(): Error in mallctl(): %s\n", __func__, michael@0: strerror(err)); michael@0: ret = 1; michael@0: goto label_return; michael@0: } michael@0: michael@0: for (i = 0; i < NTHREADS; i++) { michael@0: je_thread_create(&threads[i], je_thread_start, michael@0: (void *)&arena_ind); michael@0: } michael@0: michael@0: for (i = 0; i < NTHREADS; i++) michael@0: je_thread_join(threads[i], (void *)&ret); michael@0: michael@0: label_return: michael@0: malloc_printf("Test end\n"); michael@0: return (ret); michael@0: }