1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/memory/jemalloc/src/test/thread_tcache_enabled.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,91 @@ 1.4 +#define JEMALLOC_MANGLE 1.5 +#include "jemalloc_test.h" 1.6 + 1.7 +void * 1.8 +je_thread_start(void *arg) 1.9 +{ 1.10 + int err; 1.11 + size_t sz; 1.12 + bool e0, e1; 1.13 + 1.14 + sz = sizeof(bool); 1.15 + if ((err = mallctl("thread.tcache.enabled", &e0, &sz, NULL, 0))) { 1.16 + if (err == ENOENT) { 1.17 +#ifdef JEMALLOC_TCACHE 1.18 + assert(false); 1.19 +#endif 1.20 + } 1.21 + goto label_return; 1.22 + } 1.23 + 1.24 + if (e0) { 1.25 + e1 = false; 1.26 + assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) 1.27 + == 0); 1.28 + assert(e0); 1.29 + } 1.30 + 1.31 + e1 = true; 1.32 + assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0); 1.33 + assert(e0 == false); 1.34 + 1.35 + e1 = true; 1.36 + assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0); 1.37 + assert(e0); 1.38 + 1.39 + e1 = false; 1.40 + assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0); 1.41 + assert(e0); 1.42 + 1.43 + e1 = false; 1.44 + assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0); 1.45 + assert(e0 == false); 1.46 + 1.47 + free(malloc(1)); 1.48 + e1 = true; 1.49 + assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0); 1.50 + assert(e0 == false); 1.51 + 1.52 + free(malloc(1)); 1.53 + e1 = true; 1.54 + assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0); 1.55 + assert(e0); 1.56 + 1.57 + free(malloc(1)); 1.58 + e1 = false; 1.59 + assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0); 1.60 + assert(e0); 1.61 + 1.62 + free(malloc(1)); 1.63 + e1 = false; 1.64 + assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0); 1.65 + assert(e0 == false); 1.66 + 1.67 + free(malloc(1)); 1.68 +label_return: 1.69 + return (NULL); 1.70 +} 1.71 + 1.72 +int 1.73 +main(void) 1.74 +{ 1.75 + int ret = 0; 1.76 + je_thread_t thread; 1.77 + 1.78 + malloc_printf("Test begin\n"); 1.79 + 1.80 + je_thread_start(NULL); 1.81 + 1.82 + je_thread_create(&thread, je_thread_start, NULL); 1.83 + je_thread_join(thread, (void *)&ret); 1.84 + 1.85 + je_thread_start(NULL); 1.86 + 1.87 + je_thread_create(&thread, je_thread_start, NULL); 1.88 + je_thread_join(thread, (void *)&ret); 1.89 + 1.90 + je_thread_start(NULL); 1.91 + 1.92 + malloc_printf("Test end\n"); 1.93 + return (ret); 1.94 +}