diff options
| author | Gordon Sim <gsim@apache.org> | 2014-01-15 18:41:06 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2014-01-15 18:41:06 +0000 |
| commit | cebc02ac86b07360c72e4b023f841985b68a68a8 (patch) | |
| tree | f35e38e16df329e53b2383a44e96d00d3cef5ba6 /python | |
| parent | d9af2746a7423b9602a2036f9bd896263e810a79 (diff) | |
| download | qpid-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.py | 15 |
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 |
