EventLoop: handle EINTR IOError for epoll
authorZac Medico <zmedico@gentoo.org>
Wed, 22 Aug 2012 16:23:18 +0000 (09:23 -0700)
committerZac Medico <zmedico@gentoo.org>
Wed, 22 Aug 2012 16:23:18 +0000 (09:23 -0700)
pym/portage/util/_eventloop/EventLoop.py

index eed68fe00ecbc9c7187cf7a3854ec5bd0b9e39f0..44a3c26b688debdb5b2b51581ca3e216fd96405a 100644 (file)
@@ -96,9 +96,11 @@ class EventLoop(object):
                        try:
                                self._poll_event_queue.extend(self._poll_obj.poll(timeout))
                                break
-                       except select.error as e:
+                       except (IOError, select.error) as e:
                                # Silently handle EINTR, which is normal when we have
-                               # received a signal such as SIGINT.
+                               # received a signal such as SIGINT (epoll objects may
+                               # raise IOError rather than select.error, at least in
+                               # Python 3.2).
                                if not (e.args and e.args[0] == errno.EINTR):
                                        writemsg_level("\n!!! select error: %s\n" % (e,),
                                                level=logging.ERROR, noiselevel=-1)