fix potential deadlock between multithreaded fork and aio
[musl] / src / process / _Fork.c
index da06386..fb0fdc2 100644 (file)
@@ -14,7 +14,6 @@ pid_t _Fork(void)
        pid_t ret;
        sigset_t set;
        __block_all_sigs(&set);
-       __aio_atfork(-1);
        LOCK(__abort_lock);
 #ifdef SYS_fork
        ret = __syscall(SYS_fork);
@@ -32,7 +31,7 @@ pid_t _Fork(void)
                if (libc.need_locks) libc.need_locks = -1;
        }
        UNLOCK(__abort_lock);
-       __aio_atfork(!ret);
+       if (!ret) __aio_atfork(1);
        __restore_sigs(&set);
        return __syscall_ret(ret);
 }