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 | |
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.
-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" % \ |