summaryrefslogtreecommitdiffstats
path: root/test/thread_tcache_enabled.c
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2012-05-12 00:48:33 (GMT)
committerJason Evans <jasone@canonware.com>2012-05-12 00:48:33 (GMT)
commitfc9b1dbf69f59d7ecfc4ac68da9847e017e1d046 (patch)
tree7f843c7c51cd5df5d3be1ca48f504325f0536c0d /test/thread_tcache_enabled.c
parentfc1bb70e5f0d9a58b39efa39cc549b5af5104760 (diff)
parentcbb71caceb1e53d0fd21284ce298885327c211b4 (diff)
downloadjemalloc-3.0.0.zip
jemalloc-3.0.0.tar.gz
jemalloc-3.0.0.tar.bz2
Merge branch 'dev'3.0.0
Conflicts: ChangeLog include/jemalloc/internal/chunk.h src/chunk.c src/huge.c src/jemalloc.c test/rallocm.c
Diffstat (limited to 'test/thread_tcache_enabled.c')
-rw-r--r--test/thread_tcache_enabled.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/test/thread_tcache_enabled.c b/test/thread_tcache_enabled.c
new file mode 100644
index 0000000..2061b7b
--- /dev/null
+++ b/test/thread_tcache_enabled.c
@@ -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);
+}