Author: gsim
Date: Wed Jan 15 18:41:06 2014
New Revision: 1558503

URL: http://svn.apache.org/r1558503
Log:
QPID-2294: handle signal interruptions to select

Modified:
    qpid/trunk/qpid/python/qpid/compat.py

Modified: qpid/trunk/qpid/python/qpid/compat.py
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/compat.py?rev=1558503&r1=1558502&r2=1558503&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/compat.py (original)
+++ qpid/trunk/qpid/python/qpid/compat.py Wed Jan 15 18:41:06 2014
@@ -18,6 +18,8 @@
 #
 
 import sys
+import errno
+import time
 
 try:
   set = set
@@ -42,6 +44,7 @@ if tuple(sys.version_info[0:2]) < (2, 4)
     return old_select(list(rlist), list(wlist), list(xlist), timeout)
 else:
   from select import select
+  from select import error as SelectError
 
 class BaseWaiter:
 
@@ -49,8 +52,18 @@ class BaseWaiter:
     self._do_write()
 
   def wait(self, timeout=None):
+    start = time.time()
     if timeout is not None:
-      ready, _, _ = select([self], [], [], timeout)
+      while True:
+        try:
+          ready, _, _ = select([self], [], [], timeout)
+          break
+        except SelectError, e:
+          if e[0] == errno.EINTR:
+            elapsed = time.time() - start
+            timeout = timeout - elapsed
+          else:
+            raise e
     else:
       ready = True
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to