diff --git a/src/platform/redox/clone.rs b/src/platform/redox/clone.rs index f35a41fec9651398e91024c56a9da1f5630a7e11..1c230faad91f80d76379a53f6c2c37764c168284 100644 --- a/src/platform/redox/clone.rs +++ b/src/platform/redox/clone.rs @@ -76,7 +76,7 @@ pub unsafe fn rlct_clone_impl(stack: *mut usize) -> Result<usize> { // Unblock context. syscall::kill(new_pid, SIGCONT)?; - let _ = syscall::waitpid(new_pid, &mut 0, syscall::WUNTRACED | syscall::WCONTINUED); + let _ = syscall::waitpid(new_pid, &mut 0, syscall::WUNTRACED | syscall::WCONTINUED | syscall::WNOHANG); Ok(new_pid) } diff --git a/src/platform/redox/redox-exec/src/lib.rs b/src/platform/redox/redox-exec/src/lib.rs index f7527e4627b50bf05b9aa216cec84db8074777dc..2c067e8bb9448b099ff1b3655d8c6bd8ef044e67 100644 --- a/src/platform/redox/redox-exec/src/lib.rs +++ b/src/platform/redox/redox-exec/src/lib.rs @@ -671,7 +671,7 @@ fn fork_inner(initial_rsp: *mut usize) -> Result<usize> { // context. This means that if pgid is changed (as it is in ion for example), the pgid message // in syscall::exit() will not be inserted as the key comparator thinks they're equal as their // PIDs are. So, we have to call this to clear the waitpid queue to prevent deadlocks. - let _ = syscall::waitpid(new_pid, &mut 0, syscall::WUNTRACED | syscall::WCONTINUED); + let _ = syscall::waitpid(new_pid, &mut 0, syscall::WUNTRACED | syscall::WCONTINUED | syscall::WNOHANG); Ok(new_pid) }