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]