diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2016-02-03 18:09:35 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2016-02-10 09:28:48 -0800 |
| commit | 627515a7ff4fe12084d7e95969bda307849b4d0e (patch) | |
| tree | afbfe3723becc8e32d58cf7668fb066a063b8daf /src/libstd/sys/windows | |
| parent | b1898db0f10f9641c7616e93499348d4fe743ddd (diff) | |
| download | rust-627515a7ff4fe12084d7e95969bda307849b4d0e.tar.gz rust-627515a7ff4fe12084d7e95969bda307849b4d0e.zip | |
std: Push Child's exit status to sys::process
On Unix we have to be careful to not call `waitpid` twice, but we don't have to be careful on Windows due to the way process handles work there. As a result the cached `Option<ExitStatus>` is only necessary on Unix, and it's also just an implementation detail of the Unix module. At the same time. also update some code in `kill` on Unix to avoid a wonky waitpid with WNOHANG. This was added in 0e190b9a to solve #13124, but the `signal(0)` method is not supported any more so there's no need to for this workaround. I believe that this is no longer necessary as it's not really doing anything.
Diffstat (limited to 'src/libstd/sys/windows')
| -rw-r--r-- | src/libstd/sys/windows/process.rs | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/libstd/sys/windows/process.rs b/src/libstd/sys/windows/process.rs index 6a04aa2f2c4..e5e4187d228 100644 --- a/src/libstd/sys/windows/process.rs +++ b/src/libstd/sys/windows/process.rs @@ -202,8 +202,10 @@ impl Process { Ok(Process { handle: Handle::new(pi.hProcess) }) } - pub unsafe fn kill(&self) -> io::Result<()> { - try!(cvt(c::TerminateProcess(self.handle.raw(), 1))); + pub fn kill(&mut self) -> io::Result<()> { + try!(cvt(unsafe { + c::TerminateProcess(self.handle.raw(), 1) + })); Ok(()) } @@ -213,7 +215,7 @@ impl Process { } } - pub fn wait(&self) -> io::Result<ExitStatus> { + pub fn wait(&mut self) -> io::Result<ExitStatus> { unsafe { let res = c::WaitForSingleObject(self.handle.raw(), c::INFINITE); if res != c::WAIT_OBJECT_0 { |
