From 7f7600ceae7d013cc8ad99ffa48866c28b804db6 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 18 Aug 2008 23:24:33 +0000 Subject: The following error is known to occur with Linux kernel versions less than 2.6.24: select.error: (4, 'Interrupted system call') This error has been observed after a SIGSTOP, followed by SIGCONT. Treat it similar to EAGAIN if timeout is None, otherwise just return without any events. Thanks to Jeremy Olexa for reporting and testing this patch. svn path=/main/trunk/; revision=11436 --- pym/_emerge/__init__.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index cc1b42bef..2bb1d4428 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -8342,7 +8342,25 @@ class PollScheduler(object): not self._poll_event_handlers: raise StopIteration( "timeout is None and there are no poll() event handlers") - self._poll_event_queue.extend(self._poll_obj.poll(timeout)) + + # The following error is known to occur with Linux kernel versions + # less than 2.6.24: + # + # select.error: (4, 'Interrupted system call') + # + # This error has been observed after a SIGSTOP, followed by SIGCONT. + # Treat it similar to EAGAIN if timeout is None, otherwise just return + # without any events. + while True: + try: + self._poll_event_queue.extend(self._poll_obj.poll(timeout)) + break + except select.error, e: + writemsg_level("\n!!! select error: %s\n" % (e,), + level=logging.ERROR, noiselevel=-1) + del e + if timeout is not None: + break def _next_poll_event(self, timeout=None): """ -- cgit v1.2.3-1-g7c22