blob: ef8d68175005b953c1740d00bf99c3ac53612ac8 [file] [log] [blame]
Jason Evansb267d0f2010-08-13 15:42:29 -07001#include <stdio.h>
2#include <stdlib.h>
3#include <pthread.h>
4#include <string.h>
Jason Evansa7153a02011-03-14 11:39:49 -07005#include <assert.h>
Jason Evansb267d0f2010-08-13 15:42:29 -07006
Jason Evans2dbecf12010-09-05 10:35:13 -07007#define JEMALLOC_MANGLE
Jason Evans9f3b0a72010-10-07 09:53:26 -07008#include "jemalloc_test.h"
Jason Evansb267d0f2010-08-13 15:42:29 -07009
Jason Evansa7153a02011-03-14 11:39:49 -070010#define NTHREADS 10
11
Jason Evansb267d0f2010-08-13 15:42:29 -070012void *
13thread_start(void *arg)
14{
15 unsigned main_arena_ind = *(unsigned *)arg;
Jason Evans355b4382010-09-20 19:20:48 -070016 void *p;
Jason Evansb267d0f2010-08-13 15:42:29 -070017 unsigned arena_ind;
18 size_t size;
19 int err;
20
Jason Evans355b4382010-09-20 19:20:48 -070021 p = JEMALLOC_P(malloc)(1);
22 if (p == NULL) {
23 fprintf(stderr, "%s(): Error in malloc()\n", __func__);
24 return (void *)1;
25 }
Jason Evansb267d0f2010-08-13 15:42:29 -070026
27 size = sizeof(arena_ind);
Jason Evans2dbecf12010-09-05 10:35:13 -070028 if ((err = JEMALLOC_P(mallctl)("thread.arena", &arena_ind, &size,
Jason Evansb267d0f2010-08-13 15:42:29 -070029 &main_arena_ind, sizeof(main_arena_ind)))) {
30 fprintf(stderr, "%s(): Error in mallctl(): %s\n", __func__,
31 strerror(err));
32 return (void *)1;
33 }
34
Jason Evansa7153a02011-03-14 11:39:49 -070035 size = sizeof(arena_ind);
36 if ((err = JEMALLOC_P(mallctl)("thread.arena", &arena_ind, &size, NULL,
37 0))) {
38 fprintf(stderr, "%s(): Error in mallctl(): %s\n", __func__,
39 strerror(err));
40 return (void *)1;
41 }
42 assert(arena_ind == main_arena_ind);
43
Jason Evansb267d0f2010-08-13 15:42:29 -070044 return (NULL);
45}
46
47int
48main(void)
49{
50 int ret = 0;
Jason Evans355b4382010-09-20 19:20:48 -070051 void *p;
Jason Evansb267d0f2010-08-13 15:42:29 -070052 unsigned arena_ind;
53 size_t size;
54 int err;
Jason Evansa7153a02011-03-14 11:39:49 -070055 pthread_t threads[NTHREADS];
56 unsigned i;
Jason Evansb267d0f2010-08-13 15:42:29 -070057
58 fprintf(stderr, "Test begin\n");
59
Jason Evans355b4382010-09-20 19:20:48 -070060 p = JEMALLOC_P(malloc)(1);
61 if (p == NULL) {
62 fprintf(stderr, "%s(): Error in malloc()\n", __func__);
63 ret = 1;
64 goto RETURN;
65 }
Jason Evansb267d0f2010-08-13 15:42:29 -070066
67 size = sizeof(arena_ind);
Jason Evans2dbecf12010-09-05 10:35:13 -070068 if ((err = JEMALLOC_P(mallctl)("thread.arena", &arena_ind, &size, NULL,
69 0))) {
Jason Evansb267d0f2010-08-13 15:42:29 -070070 fprintf(stderr, "%s(): Error in mallctl(): %s\n", __func__,
71 strerror(err));
72 ret = 1;
73 goto RETURN;
74 }
75
Jason Evansa7153a02011-03-14 11:39:49 -070076 for (i = 0; i < NTHREADS; i++) {
77 if (pthread_create(&threads[i], NULL, thread_start,
78 (void *)&arena_ind) != 0) {
79 fprintf(stderr, "%s(): Error in pthread_create()\n",
80 __func__);
81 ret = 1;
82 goto RETURN;
83 }
Jason Evansb267d0f2010-08-13 15:42:29 -070084 }
Jason Evansb267d0f2010-08-13 15:42:29 -070085
Jason Evansa7153a02011-03-14 11:39:49 -070086 for (i = 0; i < NTHREADS; i++)
87 pthread_join(threads[i], (void *)&ret);
Jason Evansb267d0f2010-08-13 15:42:29 -070088
89RETURN:
90 fprintf(stderr, "Test end\n");
91 return (ret);
92}