summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHye-Shik Chang <hyeshik@gmail.com>2004-02-24 23:54:17 (GMT)
committerHye-Shik Chang <hyeshik@gmail.com>2004-02-24 23:54:17 (GMT)
commit904de5b7343994a7fcb2941ce094ab60da68afed (patch)
treeb01753fb422e1d4fa47b4e6a47f137d1df5b6fb1
parente7e9bf272729c052ffba1208f1058a790be9c47b (diff)
downloadcpython-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.py9
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" % \