summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2014-01-15 18:41:06 +0000
committerGordon Sim <gsim@apache.org>2014-01-15 18:41:06 +0000
commitcebc02ac86b07360c72e4b023f841985b68a68a8 (patch)
treef35e38e16df329e53b2383a44e96d00d3cef5ba6 /python
parentd9af2746a7423b9602a2036f9bd896263e810a79 (diff)
downloadqpid-python-cebc02ac86b07360c72e4b023f841985b68a68a8.tar.gz
QPID-2294: handle signal interruptions to select
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1558503 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python')
-rw-r--r--python/qpid/compat.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/python/qpid/compat.py b/python/qpid/compat.py
index 8b1f4b746b..ee3bf919ad 100644
--- a/python/qpid/compat.py
+++ b/python/qpid/compat.py
@@ -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