diff options
author | Yoav Steinberg <yoav@monfort.co.il> | 2021-10-10 18:03:38 +0300 |
---|---|---|
committer | Yoav Steinberg <yoav@monfort.co.il> | 2021-10-10 18:03:38 +0300 |
commit | 4a884343f5935f7d470ab0ce013a421f119cfb3a (patch) | |
tree | b65b2ddf334d971d42a297b11c3f2022353a2a69 /deps/jemalloc/test/unit/fork.c | |
parent | 7ff7536e2c55a8a624eb52ffc35c08441425e683 (diff) | |
download | redis-4a884343f5935f7d470ab0ce013a421f119cfb3a.tar.gz |
Delete old jemalloc before pulling in subtree.
Diffstat (limited to 'deps/jemalloc/test/unit/fork.c')
-rw-r--r-- | deps/jemalloc/test/unit/fork.c | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/deps/jemalloc/test/unit/fork.c b/deps/jemalloc/test/unit/fork.c deleted file mode 100644 index b1690750a..000000000 --- a/deps/jemalloc/test/unit/fork.c +++ /dev/null @@ -1,141 +0,0 @@ -#include "test/jemalloc_test.h" - -#ifndef _WIN32 -#include <sys/wait.h> -#endif - -#ifndef _WIN32 -static void -wait_for_child_exit(int pid) { - int status; - while (true) { - if (waitpid(pid, &status, 0) == -1) { - test_fail("Unexpected waitpid() failure."); - } - if (WIFSIGNALED(status)) { - test_fail("Unexpected child termination due to " - "signal %d", WTERMSIG(status)); - break; - } - if (WIFEXITED(status)) { - if (WEXITSTATUS(status) != 0) { - test_fail("Unexpected child exit value %d", - WEXITSTATUS(status)); - } - break; - } - } -} -#endif - -TEST_BEGIN(test_fork) { -#ifndef _WIN32 - void *p; - pid_t pid; - - /* Set up a manually managed arena for test. */ - unsigned arena_ind; - size_t sz = sizeof(unsigned); - assert_d_eq(mallctl("arenas.create", (void *)&arena_ind, &sz, NULL, 0), - 0, "Unexpected mallctl() failure"); - - /* Migrate to the new arena. */ - unsigned old_arena_ind; - sz = sizeof(old_arena_ind); - assert_d_eq(mallctl("thread.arena", (void *)&old_arena_ind, &sz, - (void *)&arena_ind, sizeof(arena_ind)), 0, - "Unexpected mallctl() failure"); - - p = malloc(1); - assert_ptr_not_null(p, "Unexpected malloc() failure"); - - pid = fork(); - - free(p); - - p = malloc(64); - assert_ptr_not_null(p, "Unexpected malloc() failure"); - free(p); - - if (pid == -1) { - /* Error. */ - test_fail("Unexpected fork() failure"); - } else if (pid == 0) { - /* Child. */ - _exit(0); - } else { - wait_for_child_exit(pid); - } -#else - test_skip("fork(2) is irrelevant to Windows"); -#endif -} -TEST_END - -#ifndef _WIN32 -static void * -do_fork_thd(void *arg) { - malloc(1); - int pid = fork(); - if (pid == -1) { - /* Error. */ - test_fail("Unexpected fork() failure"); - } else if (pid == 0) { - /* Child. */ - char *args[] = {"true", NULL}; - execvp(args[0], args); - test_fail("Exec failed"); - } else { - /* Parent */ - wait_for_child_exit(pid); - } - return NULL; -} -#endif - -#ifndef _WIN32 -static void -do_test_fork_multithreaded() { - thd_t child; - thd_create(&child, do_fork_thd, NULL); - do_fork_thd(NULL); - thd_join(child, NULL); -} -#endif - -TEST_BEGIN(test_fork_multithreaded) { -#ifndef _WIN32 - /* - * We've seen bugs involving hanging on arenas_lock (though the same - * class of bugs can happen on any mutex). The bugs are intermittent - * though, so we want to run the test multiple times. Since we hold the - * arenas lock only early in the process lifetime, we can't just run - * this test in a loop (since, after all the arenas are initialized, we - * won't acquire arenas_lock any further). We therefore repeat the test - * with multiple processes. - */ - for (int i = 0; i < 100; i++) { - int pid = fork(); - if (pid == -1) { - /* Error. */ - test_fail("Unexpected fork() failure,"); - } else if (pid == 0) { - /* Child. */ - do_test_fork_multithreaded(); - _exit(0); - } else { - wait_for_child_exit(pid); - } - } -#else - test_skip("fork(2) is irrelevant to Windows"); -#endif -} -TEST_END - -int -main(void) { - return test_no_reentrancy( - test_fork, - test_fork_multithreaded); -} |