summaryrefslogtreecommitdiffstats
path: root/jemalloc/test
diff options
context:
space:
mode:
authorJason Evans <je@facebook.com>2010-08-13 22:42:29 (GMT)
committerJason Evans <je@facebook.com>2010-08-14 00:36:00 (GMT)
commitb267d0f86aff15a0edb2929f09060c118ed98ec4 (patch)
tree04753d90582013a2afd1da1918a9439e6b7358c5 /jemalloc/test
parentdcd15098a8adfa6e44d7d1d041df968fb5fe9d82 (diff)
downloadjemalloc-b267d0f86aff15a0edb2929f09060c118ed98ec4.zip
jemalloc-b267d0f86aff15a0edb2929f09060c118ed98ec4.tar.gz
jemalloc-b267d0f86aff15a0edb2929f09060c118ed98ec4.tar.bz2
Add the thread.arena mallctl.
Make it possible for each thread to manage which arena it is associated with. Implement the 'tests' and 'check' build targets.
Diffstat (limited to 'jemalloc/test')
-rw-r--r--jemalloc/test/thread_arena.c69
-rw-r--r--jemalloc/test/thread_arena.exp2
2 files changed, 71 insertions, 0 deletions
diff --git a/jemalloc/test/thread_arena.c b/jemalloc/test/thread_arena.c
new file mode 100644
index 0000000..99e9669
--- /dev/null
+++ b/jemalloc/test/thread_arena.c
@@ -0,0 +1,69 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <string.h>
+
+#include "jemalloc/jemalloc.h"
+
+void *
+thread_start(void *arg)
+{
+ unsigned main_arena_ind = *(unsigned *)arg;
+ unsigned arena_ind;
+ size_t size;
+ int err;
+
+ malloc(1);
+
+ size = sizeof(arena_ind);
+ if ((err = mallctl("thread.arena", &arena_ind, &size,
+ &main_arena_ind, sizeof(main_arena_ind)))) {
+ fprintf(stderr, "%s(): Error in mallctl(): %s\n", __func__,
+ strerror(err));
+ return (void *)1;
+ }
+
+ return (NULL);
+}
+
+int
+main(void)
+{
+ int ret = 0;
+ unsigned arena_ind;
+ size_t size;
+ int err;
+ pthread_t thread;
+
+ fprintf(stderr, "Test begin\n");
+
+ malloc(1);
+
+ size = sizeof(arena_ind);
+ if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) {
+ fprintf(stderr, "%s(): Error in mallctl(): %s\n", __func__,
+ strerror(err));
+ ret = 1;
+ goto RETURN;
+ }
+
+ if (pthread_create(&thread, NULL, thread_start, (void *)&arena_ind)
+ != 0) {
+ fprintf(stderr, "%s(): Error in pthread_create()\n", __func__);
+ ret = 1;
+ goto RETURN;
+ }
+ pthread_join(thread, (void *)&ret);
+
+ if (pthread_create(&thread, NULL, thread_start, (void *)&arena_ind)
+ != 0) {
+ fprintf(stderr, "%s(): Error in pthread_create()\n", __func__);
+ ret = 1;
+ goto RETURN;
+ }
+ pthread_join(thread, (void *)&ret);
+
+RETURN:
+ fprintf(stderr, "Test end\n");
+ return (ret);
+}
diff --git a/jemalloc/test/thread_arena.exp b/jemalloc/test/thread_arena.exp
new file mode 100644
index 0000000..369a88d
--- /dev/null
+++ b/jemalloc/test/thread_arena.exp
@@ -0,0 +1,2 @@
+Test begin
+Test end