Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 #define JEMALLOC_MANGLE
2 #include "jemalloc_test.h"
4 #define NTHREADS 10
6 void *
7 je_thread_start(void *arg)
8 {
9 unsigned main_arena_ind = *(unsigned *)arg;
10 void *p;
11 unsigned arena_ind;
12 size_t size;
13 int err;
15 p = malloc(1);
16 if (p == NULL) {
17 malloc_printf("%s(): Error in malloc()\n", __func__);
18 return (void *)1;
19 }
21 size = sizeof(arena_ind);
22 if ((err = mallctl("thread.arena", &arena_ind, &size, &main_arena_ind,
23 sizeof(main_arena_ind)))) {
24 malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
25 strerror(err));
26 return (void *)1;
27 }
29 size = sizeof(arena_ind);
30 if ((err = mallctl("thread.arena", &arena_ind, &size, NULL,
31 0))) {
32 malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
33 strerror(err));
34 return (void *)1;
35 }
36 assert(arena_ind == main_arena_ind);
38 return (NULL);
39 }
41 int
42 main(void)
43 {
44 int ret = 0;
45 void *p;
46 unsigned arena_ind;
47 size_t size;
48 int err;
49 je_thread_t threads[NTHREADS];
50 unsigned i;
52 malloc_printf("Test begin\n");
54 p = malloc(1);
55 if (p == NULL) {
56 malloc_printf("%s(): Error in malloc()\n", __func__);
57 ret = 1;
58 goto label_return;
59 }
61 size = sizeof(arena_ind);
62 if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) {
63 malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
64 strerror(err));
65 ret = 1;
66 goto label_return;
67 }
69 for (i = 0; i < NTHREADS; i++) {
70 je_thread_create(&threads[i], je_thread_start,
71 (void *)&arena_ind);
72 }
74 for (i = 0; i < NTHREADS; i++)
75 je_thread_join(threads[i], (void *)&ret);
77 label_return:
78 malloc_printf("Test end\n");
79 return (ret);
80 }