blob: 2922d1b45ec55aa5aa4de541d5b5d42b210fd9a7 [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 Evans0a5489e2012-03-01 17:19:20 -080021 p = malloc(1);
Jason Evans355b4382010-09-20 19:20:48 -070022 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 Evans0a5489e2012-03-01 17:19:20 -080028 if ((err = mallctl("thread.arena", &arena_ind, &size, &main_arena_ind,
29 sizeof(main_arena_ind)))) {
Jason Evansb267d0f2010-08-13 15:42:29 -070030 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);
Jason Evans0a5489e2012-03-01 17:19:20 -080036 if ((err = mallctl("thread.arena", &arena_ind, &size, NULL,
Jason Evansa7153a02011-03-14 11:39:49 -070037 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 Evans0a5489e2012-03-01 17:19:20 -080060 p = malloc(1);
Jason Evans355b4382010-09-20 19:20:48 -070061 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 Evans0a5489e2012-03-01 17:19:20 -080068 if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) {
Jason Evansb267d0f2010-08-13 15:42:29 -070069 fprintf(stderr, "%s(): Error in mallctl(): %s\n", __func__,
70 strerror(err));
71 ret = 1;
72 goto RETURN;
73 }
74
Jason Evansa7153a02011-03-14 11:39:49 -070075 for (i = 0; i < NTHREADS; i++) {
76 if (pthread_create(&threads[i], NULL, thread_start,
77 (void *)&arena_ind) != 0) {
78 fprintf(stderr, "%s(): Error in pthread_create()\n",
79 __func__);
80 ret = 1;
81 goto RETURN;
82 }
Jason Evansb267d0f2010-08-13 15:42:29 -070083 }
Jason Evansb267d0f2010-08-13 15:42:29 -070084
Jason Evansa7153a02011-03-14 11:39:49 -070085 for (i = 0; i < NTHREADS; i++)
86 pthread_join(threads[i], (void *)&ret);
Jason Evansb267d0f2010-08-13 15:42:29 -070087
88RETURN:
89 fprintf(stderr, "Test end\n");
90 return (ret);
91}