diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2012-07-30 23:03:46 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2012-07-30 23:03:46 +0000 |
| commit | 5d7d6b460e28c1ed5cbf35c68dd608cb6552a883 (patch) | |
| tree | e74edb1ea6477f795e0d41a9755e4cda50f561ba /python/qpid/selector.py | |
| parent | 2ced481b4a75d55f431d94b0e3b8f848f7087050 (diff) | |
| download | qpid-python-5d7d6b460e28c1ed5cbf35c68dd608cb6552a883.tar.gz | |
QPID-4147: made selector handle interrupt based on patch from siddesh
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1367354 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/qpid/selector.py')
| -rw-r--r-- | python/qpid/selector.py | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/python/qpid/selector.py b/python/qpid/selector.py index ca5946c3f9..ff94091da0 100644 --- a/python/qpid/selector.py +++ b/python/qpid/selector.py @@ -16,7 +16,7 @@ # specific language governing permissions and limitations # under the License. # -import atexit, time +import atexit, time, errno from compat import select, set, selectable_waiter from threading import Thread, Lock @@ -111,12 +111,24 @@ class Selector: else: wakeup = min(wakeup, t) - if wakeup is None: - timeout = None - else: - timeout = max(0, wakeup - time.time()) + rd = [] + wr = [] + ex = [] - rd, wr, ex = select(self.reading, self.writing, (), timeout) + while True: + try: + if wakeup is None: + timeout = None + else: + timeout = max(0, wakeup - time.time()) + rd, wr, ex = select(self.reading, self.writing, (), timeout) + break + except Exception, (err, strerror): + # Repeat the select call if we were interrupted. + if err == errno.EINTR: + continue + else: + raise for sel in wr: if sel.writing(): |
