thread_tcache_enabled.c revision 86abd0dcd8e478759fe409d338d11558c4cec427
1#include "test/jemalloc_test.h"
2
3void *
4je_thread_start(void *arg)
5{
6	int err;
7	size_t sz;
8	bool e0, e1;
9
10	sz = sizeof(bool);
11	if ((err = mallctl("thread.tcache.enabled", &e0, &sz, NULL, 0))) {
12		if (err == ENOENT) {
13#ifdef JEMALLOC_TCACHE
14			assert(false);
15#endif
16		}
17		goto label_return;
18	}
19
20	if (e0) {
21		e1 = false;
22		assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz)
23		    == 0);
24		assert(e0);
25	}
26
27	e1 = true;
28	assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
29	assert(e0 == false);
30
31	e1 = true;
32	assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
33	assert(e0);
34
35	e1 = false;
36	assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
37	assert(e0);
38
39	e1 = false;
40	assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
41	assert(e0 == false);
42
43	free(malloc(1));
44	e1 = true;
45	assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
46	assert(e0 == false);
47
48	free(malloc(1));
49	e1 = true;
50	assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
51	assert(e0);
52
53	free(malloc(1));
54	e1 = false;
55	assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
56	assert(e0);
57
58	free(malloc(1));
59	e1 = false;
60	assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
61	assert(e0 == false);
62
63	free(malloc(1));
64label_return:
65	return (NULL);
66}
67
68int
69main(void)
70{
71	int ret = 0;
72	je_thread_t thread;
73
74	malloc_printf("Test begin\n");
75
76	je_thread_start(NULL);
77
78	je_thread_create(&thread, je_thread_start, NULL);
79	je_thread_join(thread, NULL);
80
81	je_thread_start(NULL);
82
83	je_thread_create(&thread, je_thread_start, NULL);
84	je_thread_join(thread, NULL);
85
86	je_thread_start(NULL);
87
88	malloc_printf("Test end\n");
89	return (ret);
90}
91