• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "test/jemalloc_test.h"
2 
3 void *
thd_start(void * arg)4 thd_start(void *arg) {
5 	bool e0, e1;
6 	size_t sz = sizeof(bool);
7 	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz, NULL,
8 	    0), 0, "Unexpected mallctl failure");
9 
10 	if (e0) {
11 		e1 = false;
12 		assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
13 		    (void *)&e1, sz), 0, "Unexpected mallctl() error");
14 		assert_true(e0, "tcache should be enabled");
15 	}
16 
17 	e1 = true;
18 	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
19 	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
20 	assert_false(e0, "tcache should be disabled");
21 
22 	e1 = true;
23 	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
24 	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
25 	assert_true(e0, "tcache should be enabled");
26 
27 	e1 = false;
28 	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
29 	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
30 	assert_true(e0, "tcache should be enabled");
31 
32 	e1 = false;
33 	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
34 	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
35 	assert_false(e0, "tcache should be disabled");
36 
37 	free(malloc(1));
38 	e1 = true;
39 	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
40 	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
41 	assert_false(e0, "tcache should be disabled");
42 
43 	free(malloc(1));
44 	e1 = true;
45 	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
46 	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
47 	assert_true(e0, "tcache should be enabled");
48 
49 	free(malloc(1));
50 	e1 = false;
51 	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
52 	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
53 	assert_true(e0, "tcache should be enabled");
54 
55 	free(malloc(1));
56 	e1 = false;
57 	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
58 	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
59 	assert_false(e0, "tcache should be disabled");
60 
61 	free(malloc(1));
62 	return NULL;
63 }
64 
TEST_BEGIN(test_main_thread)65 TEST_BEGIN(test_main_thread) {
66 	thd_start(NULL);
67 }
68 TEST_END
69 
TEST_BEGIN(test_subthread)70 TEST_BEGIN(test_subthread) {
71 	thd_t thd;
72 
73 	thd_create(&thd, thd_start, NULL);
74 	thd_join(thd, NULL);
75 }
76 TEST_END
77 
78 int
main(void)79 main(void) {
80 	/* Run tests multiple times to check for bad interactions. */
81 	return test(
82 	    test_main_thread,
83 	    test_subthread,
84 	    test_main_thread,
85 	    test_subthread,
86 	    test_main_thread);
87 }
88