diff --git a/src/spawn.rs b/src/spawn.rs index eeb9b7871d..bd8858a922 100644 --- a/src/spawn.rs +++ b/src/spawn.rs @@ -370,7 +370,7 @@ pub fn posix_spawn, SE: AsRef>( ) -> Result { let mut pid = 0; - let res = unsafe { + let ret = unsafe { let args_p = to_exec_array(args); let env_p = to_exec_array(envp); @@ -384,7 +384,10 @@ pub fn posix_spawn, SE: AsRef>( ) }; - Errno::result(res)?; + if ret != 0 { + return Err(Errno::from_raw(ret)); + } + Ok(Pid::from_raw(pid)) } @@ -399,7 +402,7 @@ pub fn posix_spawnp, SE: AsRef>( ) -> Result { let mut pid = 0; - let res = unsafe { + let ret = unsafe { let args_p = to_exec_array(args); let env_p = to_exec_array(envp); @@ -413,6 +416,9 @@ pub fn posix_spawnp, SE: AsRef>( ) }; - Errno::result(res)?; + if ret != 0 { + return Err(Errno::from_raw(ret)); + } + Ok(Pid::from_raw(pid)) } diff --git a/test/test_spawn.rs b/test/test_spawn.rs index 1283c96ca8..58dfec31e6 100644 --- a/test/test_spawn.rs +++ b/test/test_spawn.rs @@ -1,11 +1,13 @@ -use std::ffi::CString; - +use super::FORK_MTX; use nix::spawn::{self, PosixSpawnAttr, PosixSpawnFileActions}; use nix::sys::signal; use nix::sys::wait::{waitpid, WaitPidFlag, WaitStatus}; +use std::ffi::CString; #[test] fn spawn_true() { + let _guard = FORK_MTX.lock(); + let bin = &CString::new("true").unwrap(); let args = &[ CString::new("true").unwrap(), @@ -32,6 +34,8 @@ fn spawn_true() { #[test] fn spawn_sleep() { + let _guard = FORK_MTX.lock(); + let bin = &CString::new("sleep").unwrap(); let args = &[CString::new("sleep").unwrap(), CString::new("30").unwrap()]; let vars: &[CString] = &[];