diff options
Diffstat (limited to 'examples/redis-unstable/deps/jemalloc/test/integration/thread_arena.c')
| -rw-r--r-- | examples/redis-unstable/deps/jemalloc/test/integration/thread_arena.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/examples/redis-unstable/deps/jemalloc/test/integration/thread_arena.c b/examples/redis-unstable/deps/jemalloc/test/integration/thread_arena.c new file mode 100644 index 0000000..4a6abf6 --- /dev/null +++ b/examples/redis-unstable/deps/jemalloc/test/integration/thread_arena.c | |||
| @@ -0,0 +1,86 @@ | |||
| 1 | #include "test/jemalloc_test.h" | ||
| 2 | |||
| 3 | #define NTHREADS 10 | ||
| 4 | |||
| 5 | void * | ||
| 6 | thd_start(void *arg) { | ||
| 7 | unsigned main_arena_ind = *(unsigned *)arg; | ||
| 8 | void *p; | ||
| 9 | unsigned arena_ind; | ||
| 10 | size_t size; | ||
| 11 | int err; | ||
| 12 | |||
| 13 | p = malloc(1); | ||
| 14 | expect_ptr_not_null(p, "Error in malloc()"); | ||
| 15 | free(p); | ||
| 16 | |||
| 17 | size = sizeof(arena_ind); | ||
| 18 | if ((err = mallctl("thread.arena", (void *)&arena_ind, &size, | ||
| 19 | (void *)&main_arena_ind, sizeof(main_arena_ind)))) { | ||
| 20 | char buf[BUFERROR_BUF]; | ||
| 21 | |||
| 22 | buferror(err, buf, sizeof(buf)); | ||
| 23 | test_fail("Error in mallctl(): %s", buf); | ||
| 24 | } | ||
| 25 | |||
| 26 | size = sizeof(arena_ind); | ||
| 27 | if ((err = mallctl("thread.arena", (void *)&arena_ind, &size, NULL, | ||
| 28 | 0))) { | ||
| 29 | char buf[BUFERROR_BUF]; | ||
| 30 | |||
| 31 | buferror(err, buf, sizeof(buf)); | ||
| 32 | test_fail("Error in mallctl(): %s", buf); | ||
| 33 | } | ||
| 34 | expect_u_eq(arena_ind, main_arena_ind, | ||
| 35 | "Arena index should be same as for main thread"); | ||
| 36 | |||
| 37 | return NULL; | ||
| 38 | } | ||
| 39 | |||
| 40 | static void | ||
| 41 | mallctl_failure(int err) { | ||
| 42 | char buf[BUFERROR_BUF]; | ||
| 43 | |||
| 44 | buferror(err, buf, sizeof(buf)); | ||
| 45 | test_fail("Error in mallctl(): %s", buf); | ||
| 46 | } | ||
| 47 | |||
| 48 | TEST_BEGIN(test_thread_arena) { | ||
| 49 | void *p; | ||
| 50 | int err; | ||
| 51 | thd_t thds[NTHREADS]; | ||
| 52 | unsigned i; | ||
| 53 | |||
| 54 | p = malloc(1); | ||
| 55 | expect_ptr_not_null(p, "Error in malloc()"); | ||
| 56 | |||
| 57 | unsigned arena_ind, old_arena_ind; | ||
| 58 | size_t sz = sizeof(unsigned); | ||
| 59 | expect_d_eq(mallctl("arenas.create", (void *)&arena_ind, &sz, NULL, 0), | ||
| 60 | 0, "Arena creation failure"); | ||
| 61 | |||
| 62 | size_t size = sizeof(arena_ind); | ||
| 63 | if ((err = mallctl("thread.arena", (void *)&old_arena_ind, &size, | ||
| 64 | (void *)&arena_ind, sizeof(arena_ind))) != 0) { | ||
| 65 | mallctl_failure(err); | ||
| 66 | } | ||
| 67 | |||
| 68 | for (i = 0; i < NTHREADS; i++) { | ||
| 69 | thd_create(&thds[i], thd_start, | ||
| 70 | (void *)&arena_ind); | ||
| 71 | } | ||
| 72 | |||
| 73 | for (i = 0; i < NTHREADS; i++) { | ||
| 74 | intptr_t join_ret; | ||
| 75 | thd_join(thds[i], (void *)&join_ret); | ||
| 76 | expect_zd_eq(join_ret, 0, "Unexpected thread join error"); | ||
| 77 | } | ||
| 78 | free(p); | ||
| 79 | } | ||
| 80 | TEST_END | ||
| 81 | |||
| 82 | int | ||
| 83 | main(void) { | ||
| 84 | return test( | ||
| 85 | test_thread_arena); | ||
| 86 | } | ||
