Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
jobserver.py: _try_read()'s alarm timeout needs to throw an exception.
In python3, os.read() automatically retries after EINTR, which breaks our ability to interrupt on SIGALRM. Instead, throw an exception from the SIGALRM handler, which should work on both python2 and python3. This fixes a rare deadlock during parallel builds on python3. For background: https://www.python.org/dev/peps/pep-0475/#backward-compatibility "Applications relying on the fact that system calls are interrupted with InterruptedError will hang. The authors of this PEP don't think that such applications exist [...]" Well, apparently they were mistaken :)
- Loading branch information