diff options
author | Jason Evans <je@facebook.com> | 2010-08-13 22:42:29 (GMT) |
---|---|---|
committer | Jason Evans <je@facebook.com> | 2010-08-14 00:36:00 (GMT) |
commit | b267d0f86aff15a0edb2929f09060c118ed98ec4 (patch) | |
tree | 04753d90582013a2afd1da1918a9439e6b7358c5 /jemalloc/test | |
parent | dcd15098a8adfa6e44d7d1d041df968fb5fe9d82 (diff) | |
download | jemalloc-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.c | 69 | ||||
-rw-r--r-- | jemalloc/test/thread_arena.exp | 2 |
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 |