#include #include #include #include #define JEMALLOC_MANGLE #include "jemalloc_test.h" void * thread_start(void *arg) { unsigned main_arena_ind = *(unsigned *)arg; void *p; unsigned arena_ind; size_t size; int err; p = JEMALLOC_P(malloc)(1); if (p == NULL) { fprintf(stderr, "%s(): Error in malloc()\n", __func__); return (void *)1; } size = sizeof(arena_ind); if ((err = JEMALLOC_P(mallctl)("thread.arena", &arena_ind, &size, &main_arena_ind, sizeof(main_arena_ind)))) { fprintf(stderr, "%s(): Error in mallctl(): %s\n", __func__, strerror(err)); return (void *)1; } return (NULL); } int main(void) { int ret = 0; void *p; unsigned arena_ind; size_t size; int err; pthread_t thread; fprintf(stderr, "Test begin\n"); p = JEMALLOC_P(malloc)(1); if (p == NULL) { fprintf(stderr, "%s(): Error in malloc()\n", __func__); ret = 1; goto RETURN; } 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)); ret = 1; 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; } 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); RETURN: fprintf(stderr, "Test end\n"); return (ret); }