Rollup merge of #87185 - waterlens:issue-86499-fix, r=Mark-Simulacrum

Fix panics on Windows when the build was cancelled

Fixes #86499

cc `@jyn514`
This commit is contained in:
Yuki Okushi 2021-07-24 04:31:05 +09:00 committed by GitHub
commit ba869da889
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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(),