diff options
| author | bors <bors@rust-lang.org> | 2017-01-15 08:01:19 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-01-15 08:01:19 +0000 |
| commit | d274e554ad8327d4042ed71c1e3e5fa23d36f414 (patch) | |
| tree | a7bb31d7f0d576d2d4056e75295f9bbb864206f1 /src/libstd | |
| parent | 4f0508af90cfe4fac018b1a464ed94a828811600 (diff) | |
| parent | b10e06166ef8a71edf5cf1d61a94b6639880eb05 (diff) | |
| download | rust-d274e554ad8327d4042ed71c1e3e5fa23d36f414.tar.gz rust-d274e554ad8327d4042ed71c1e3e5fa23d36f414.zip | |
Auto merge of #39045 - redox-os:process_try_wait, r=brson
Add try_wait to Redox process This implements Process::try_wait on Redox
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/sys/redox/process.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libstd/sys/redox/process.rs b/src/libstd/sys/redox/process.rs index 849f51013e6..50dcd44b42e 100644 --- a/src/libstd/sys/redox/process.rs +++ b/src/libstd/sys/redox/process.rs @@ -501,4 +501,18 @@ impl Process { self.status = Some(ExitStatus(status as i32)); Ok(ExitStatus(status as i32)) } + + pub fn try_wait(&mut self) -> io::Result<ExitStatus> { + if let Some(status) = self.status { + return Ok(status) + } + let mut status = 0; + let pid = cvt(syscall::waitpid(self.pid, &mut status, syscall::WNOHANG))?; + if pid == 0 { + Err(io::Error::from_raw_os_error(syscall::EWOULDBLOCK)) + } else { + self.status = Some(ExitStatus(status as i32)); + Ok(ExitStatus(status as i32)) + } + } } |
