summaryrefslogtreecommitdiffstats
path: root/Lib/distutils
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 /Lib/distutils
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.
Diffstat (limited to 'Lib/distutils')
-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" % \