]> git.saurik.com Git - redis.git/blobdiff - deps/jemalloc/test/thread_tcache_enabled.c
Jemalloc updated to 3.0.0.
[redis.git] / deps / jemalloc / test / thread_tcache_enabled.c
diff --git a/deps/jemalloc/test/thread_tcache_enabled.c b/deps/jemalloc/test/thread_tcache_enabled.c
new file mode 100644 (file)
index 0000000..2061b7b
--- /dev/null
@@ -0,0 +1,91 @@
+#define        JEMALLOC_MANGLE
+#include "jemalloc_test.h"
+
+void *
+je_thread_start(void *arg)
+{
+       int err;
+       size_t sz;
+       bool e0, e1;
+
+       sz = sizeof(bool);
+       if ((err = mallctl("thread.tcache.enabled", &e0, &sz, NULL, 0))) {
+               if (err == ENOENT) {
+#ifdef JEMALLOC_TCACHE
+                       assert(false);
+#endif
+               }
+               goto label_return;
+       }
+
+       if (e0) {
+               e1 = false;
+               assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz)
+                   == 0);
+               assert(e0);
+       }
+
+       e1 = true;
+       assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
+       assert(e0 == false);
+
+       e1 = true;
+       assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
+       assert(e0);
+
+       e1 = false;
+       assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
+       assert(e0);
+
+       e1 = false;
+       assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
+       assert(e0 == false);
+
+       free(malloc(1));
+       e1 = true;
+       assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
+       assert(e0 == false);
+
+       free(malloc(1));
+       e1 = true;
+       assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
+       assert(e0);
+
+       free(malloc(1));
+       e1 = false;
+       assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
+       assert(e0);
+
+       free(malloc(1));
+       e1 = false;
+       assert(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz) == 0);
+       assert(e0 == false);
+
+       free(malloc(1));
+label_return:
+       return (NULL);
+}
+
+int
+main(void)
+{
+       int ret = 0;
+       je_thread_t thread;
+
+       malloc_printf("Test begin\n");
+
+       je_thread_start(NULL);
+
+       je_thread_create(&thread, je_thread_start, NULL);
+       je_thread_join(thread, (void *)&ret);
+
+       je_thread_start(NULL);
+
+       je_thread_create(&thread, je_thread_start, NULL);
+       je_thread_join(thread, (void *)&ret);
+
+       je_thread_start(NULL);
+
+       malloc_printf("Test end\n");
+       return (ret);
+}