summaryrefslogtreecommitdiffstats
path: root/Lib/distutils/spawn.py
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/spawn.py
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/spawn.py')
-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" % \