From 904de5b7343994a7fcb2941ce094ab60da68afed Mon Sep 17 00:00:00 2001 From: Hye-Shik Chang Date: Tue, 24 Feb 2004 23:54:17 +0000 Subject: 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. --- Lib/distutils/spawn.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'Lib/distutils/spawn.py') diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py index 4857ce5e63..67391e8826 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" % \ -- cgit v1.2.1