From bf988c29bbcd6a5737a1145db58ec8108133319c Mon Sep 17 00:00:00 2001 From: Guido Trotter Date: Tue, 16 Dec 2008 16:24:22 +0000 Subject: [PATCH] _RunCmdPipe: handle EINTR in poller.poll() poll() can be interrupted. rather than failing we retry until it returns. Reviewed-by: iustinp --- lib/utils.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/utils.py b/lib/utils.py index 23387aa..25bb9a4 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -203,7 +203,18 @@ def _RunCmdPipe(cmd, env, via_shell, cwd): fcntl.fcntl(fd, fcntl.F_SETFL, status | os.O_NONBLOCK) while fdmap: - for fd, event in poller.poll(): + try: + pollresult = poller.poll() + except EnvironmentError, eerr: + if eerr.errno == errno.EINTR: + continue + raise + except select.error, serr: + if serr[0] == errno.EINTR: + continue + raise + + for fd, event in pollresult: if event & select.POLLIN or event & select.POLLPRI: data = fdmap[fd][1].read() # no data from read signifies EOF (the same as POLLHUP) -- 1.7.10.4