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