diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2016-02-11 20:46:47 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2016-02-12 10:40:32 -0800 |
| commit | 07638b95cec645bf8f587eb7851412aa3cdf4995 (patch) | |
| tree | 610a6309ece26c7dbecfdcb9f75eb81dd6183d72 | |
| parent | a1c13d03a5bbbc99d595906e566912e0bad337b3 (diff) | |
bootstrap: Be resilient to job object failures
The build bots already use job objects, and they don't support nested job objects, and we shouldn't entirely bail out in this case anyway!
| -rw-r--r-- | src/bootstrap/build/job.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/bootstrap/build/job.rs b/src/bootstrap/build/job.rs index 49e027ffda5..a4e53bc45fc 100644 --- a/src/bootstrap/build/job.rs +++ b/src/bootstrap/build/job.rs @@ -64,9 +64,20 @@ pub unsafe fn setup() { mem::size_of_val(&info) as DWORD); assert!(r != 0, "{}", io::Error::last_os_error()); - // Assign our process to this job object + // Assign our process to this job object. Note that if this fails, one very + // likely reason is that we are ourselves already in a job object! This can + // happen on the build bots that we've got for Windows, or if just anyone + // else is instrumenting the build. In this case we just bail out + // immediately and assume that they take care of it. + // + // Also note that nested jobs (why this might fail) are supported in recent + // versions of Windows, but the version of Windows that our bots are running + // at least don't support nested job objects. let r = AssignProcessToJobObject(job, GetCurrentProcess()); - assert!(r != 0, "{}", io::Error::last_os_error()); + if r == 0 { + CloseHandle(job); + return + } // If we've got a parent process (e.g. the python script that called us) // then move ownership of this job object up to them. That way if the python |
