X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fprocess%2F_Fork.c;h=9c07792dd1537ebd845a48f020f1ad833917261d;hb=fa4a8abd06a401822cc8ba4e352a219544c0118d;hp=e76508632c78b2f3bdee6b75c6ed0ae72834fff0;hpb=0c277ff156749628c678257f878d3a6edb5868de;p=musl diff --git a/src/process/_Fork.c b/src/process/_Fork.c index e7650863..9c07792d 100644 --- a/src/process/_Fork.c +++ b/src/process/_Fork.c @@ -5,21 +5,13 @@ #include "lock.h" #include "pthread_impl.h" #include "aio_impl.h" +#include "fork_impl.h" static void dummy(int x) { } weak_alias(dummy, __aio_atfork); -pid_t _Fork(void) +void __post_Fork(int ret) { - pid_t ret; - sigset_t set; - __block_all_sigs(&set); - LOCK(__abort_lock); -#ifdef SYS_fork - ret = __syscall(SYS_fork); -#else - ret = __syscall(SYS_clone, SIGCHLD, 0); -#endif if (!ret) { pthread_t self = __pthread_self(); self->tid = __syscall(SYS_set_tid_address, &__thread_list_lock); @@ -32,6 +24,20 @@ pid_t _Fork(void) } UNLOCK(__abort_lock); if (!ret) __aio_atfork(1); +} + +pid_t _Fork(void) +{ + pid_t ret; + sigset_t set; + __block_all_sigs(&set); + LOCK(__abort_lock); +#ifdef SYS_fork + ret = __syscall(SYS_fork); +#else + ret = __syscall(SYS_clone, SIGCHLD, 0); +#endif + __post_Fork(ret); __restore_sigs(&set); return __syscall_ret(ret); }