Home | History | Annotate | Download | only in integration
      1 #include "test/jemalloc_test.h"
      2 
      3 #define	NTHREADS 10
      4 
      5 void *
      6 thd_start(void *arg)
      7 {
      8 	unsigned main_arena_ind = *(unsigned *)arg;
      9 	void *p;
     10 	unsigned arena_ind;
     11 	size_t size;
     12 	int err;
     13 
     14 	p = malloc(1);
     15 	assert_ptr_not_null(p, "Error in malloc()");
     16 	free(p);
     17 
     18 	size = sizeof(arena_ind);
     19 	if ((err = mallctl("thread.arena", (void *)&arena_ind, &size,
     20 	    (void *)&main_arena_ind, sizeof(main_arena_ind)))) {
     21 		char buf[BUFERROR_BUF];
     22 
     23 		buferror(err, buf, sizeof(buf));
     24 		test_fail("Error in mallctl(): %s", buf);
     25 	}
     26 
     27 	size = sizeof(arena_ind);
     28 	if ((err = mallctl("thread.arena", (void *)&arena_ind, &size, NULL,
     29 	    0))) {
     30 		char buf[BUFERROR_BUF];
     31 
     32 		buferror(err, buf, sizeof(buf));
     33 		test_fail("Error in mallctl(): %s", buf);
     34 	}
     35 	assert_u_eq(arena_ind, main_arena_ind,
     36 	    "Arena index should be same as for main thread");
     37 
     38 	return (NULL);
     39 }
     40 
     41 TEST_BEGIN(test_thread_arena)
     42 {
     43 	void *p;
     44 	unsigned arena_ind;
     45 	size_t size;
     46 	int err;
     47 	thd_t thds[NTHREADS];
     48 	unsigned i;
     49 
     50 	p = malloc(1);
     51 	assert_ptr_not_null(p, "Error in malloc()");
     52 
     53 	size = sizeof(arena_ind);
     54 	if ((err = mallctl("thread.arena", (void *)&arena_ind, &size, NULL,
     55 	    0))) {
     56 		char buf[BUFERROR_BUF];
     57 
     58 		buferror(err, buf, sizeof(buf));
     59 		test_fail("Error in mallctl(): %s", buf);
     60 	}
     61 
     62 	for (i = 0; i < NTHREADS; i++) {
     63 		thd_create(&thds[i], thd_start,
     64 		    (void *)&arena_ind);
     65 	}
     66 
     67 	for (i = 0; i < NTHREADS; i++) {
     68 		intptr_t join_ret;
     69 		thd_join(thds[i], (void *)&join_ret);
     70 		assert_zd_eq(join_ret, 0, "Unexpected thread join error");
     71 	}
     72 }
     73 TEST_END
     74 
     75 int
     76 main(void)
     77 {
     78 
     79 	return (test(
     80 	    test_thread_arena));
     81 }
     82