diff options
author | Hye-Shik Chang <hyeshik@gmail.com> | 2004-02-24 23:54:17 (GMT) |
---|---|---|
committer | Hye-Shik Chang <hyeshik@gmail.com> | 2004-02-24 23:54:17 (GMT) |
commit | 904de5b7343994a7fcb2941ce094ab60da68afed (patch) | |
tree | b01753fb422e1d4fa47b4e6a47f137d1df5b6fb1 /Lib/distutils | |
parent | e7e9bf272729c052ffba1208f1058a790be9c47b (diff) | |
download | cpython-904de5b7343994a7fcb2941ce094ab60da68afed.zip cpython-904de5b7343994a7fcb2941ce094ab60da68afed.tar.gz cpython-904de5b7343994a7fcb2941ce094ab60da68afed.tar.bz2 |
Make _spawn_posix be ready for EINTR. waitpid(2) can be interrupted
by SIGCHLD or sth because no signal is masked before. This fixes
an optimized installation problem on FreeBSD libpthread.
Diffstat (limited to 'Lib/distutils')
-rw-r--r-- | Lib/distutils/spawn.py | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py index 4857ce5..67391e8 100644 --- a/Lib/distutils/spawn.py +++ b/Lib/distutils/spawn.py @@ -144,7 +144,14 @@ def _spawn_posix (cmd, # Loop until the child either exits or is terminated by a signal # (ie. keep waiting if it's merely stopped) while 1: - (pid, status) = os.waitpid(pid, 0) + try: + (pid, status) = os.waitpid(pid, 0) + except OSError, exc: + import errno + if exc.errno == errno.EINTR: + continue + raise DistutilsExecError, \ + "command '%s' failed: %s" % (cmd[0], exc[-1]) if os.WIFSIGNALED(status): raise DistutilsExecError, \ "command '%s' terminated by signal %d" % \ |