diff options
| author | waterlens <82268070+waterlens@users.noreply.github.com> | 2021-07-16 17:56:51 +0800 |
|---|---|---|
| committer | waterlens <82268070+waterlens@users.noreply.github.com> | 2021-07-16 17:56:51 +0800 |
| commit | 3c384cee52e002244caaa0ef0288aadcb85be691 (patch) | |
| tree | fe7a82ce28bc9bb5d80f0be35d00269437fd79b8 | |
| parent | 057050a95bdfc5849a893208c53c7b2a081c6808 (diff) | |
| download | rust-3c384cee52e002244caaa0ef0288aadcb85be691.tar.gz rust-3c384cee52e002244caaa0ef0288aadcb85be691.zip | |
Fix panics on Windows when the build was cancelled
| -rw-r--r-- | src/bootstrap/job.rs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/bootstrap/job.rs b/src/bootstrap/job.rs index 2fe9b06e426..5c0322e18a4 100644 --- a/src/bootstrap/job.rs +++ b/src/bootstrap/job.rs @@ -103,12 +103,20 @@ pub unsafe fn setup(build: &mut Build) { }; let parent = OpenProcess(PROCESS_DUP_HANDLE, FALSE, pid.parse().unwrap()); - assert!( - !parent.is_null(), - "PID `{}` doesn't seem to exist: {}", - pid, - io::Error::last_os_error() - ); + + // If we get a null parent pointer here, it is possible that either + // we have got an invalid pid or the parent process has been closed. + // Since the first case rarely happens + // (only when wrongly setting the environmental variable), + // so it might be better to improve the experience of the second case + // when users have interrupted the parent process and we don't finish + // duplicating the handle yet. + // We just need close the job object if that occurs. + if parent.is_null() { + CloseHandle(job); + return; + } + let mut parent_handle = ptr::null_mut(); let r = DuplicateHandle( GetCurrentProcess(), |
