diff options
Diffstat (limited to 'eventlet')
| -rw-r--r-- | eventlet/green/select.py | 16 | ||||
| -rw-r--r-- | eventlet/hubs/kqueue.py | 11 |
2 files changed, 12 insertions, 15 deletions
diff --git a/eventlet/green/select.py b/eventlet/green/select.py index 60301d3..f177502 100644 --- a/eventlet/green/select.py +++ b/eventlet/green/select.py @@ -1,8 +1,8 @@ -__select = __import__('select') -error = __select.error -from eventlet.greenthread import getcurrent +import eventlet from eventlet.hubs import get_hub from eventlet.support import six +__select = eventlet.patcher.original('select') +error = __select.error __patched__ = ['select'] @@ -36,7 +36,7 @@ def select(read_list, write_list, error_list, timeout=None): raise TypeError("Expected number for timeout") hub = get_hub() timers = [] - current = getcurrent() + current = eventlet.getcurrent() assert hub.greenlet is not current, 'do not call blocking functions from the mainloop' ds = {} for r in read_list: @@ -56,10 +56,6 @@ def select(read_list, write_list, error_list, timeout=None): original = ds[get_fileno(d)]['write'] current.switch(([], [original], [])) - def on_error(d, _err=None): - original = ds[get_fileno(d)]['error'] - current.switch(([], [], [original])) - def on_timeout2(): current.switch(([], [], [])) @@ -77,9 +73,9 @@ def select(read_list, write_list, error_list, timeout=None): try: for k, v in six.iteritems(ds): if v.get('read'): - listeners.append(hub.add(hub.READ, k, on_read, on_error, lambda x: None)) + listeners.append(hub.add(hub.READ, k, on_read, current.throw, lambda: None)) if v.get('write'): - listeners.append(hub.add(hub.WRITE, k, on_write, on_error, lambda x: None)) + listeners.append(hub.add(hub.WRITE, k, on_write, current.throw, lambda: None)) try: return hub.switch() finally: diff --git a/eventlet/hubs/kqueue.py b/eventlet/hubs/kqueue.py index 9487a16..05a961b 100644 --- a/eventlet/hubs/kqueue.py +++ b/eventlet/hubs/kqueue.py @@ -1,12 +1,11 @@ import os import sys -from eventlet import patcher +from eventlet import patcher, support from eventlet.support import six select = patcher.original('select') time = patcher.original('time') sleep = time.sleep -from eventlet.support import clear_sys_exc_info from eventlet.hubs.hub import BaseHub, READ, WRITE, noop @@ -73,9 +72,11 @@ class Hub(BaseHub): evtype = listener.evtype fileno = listener.fileno if not self.listeners[evtype].get(fileno): - event = self._events[fileno].pop(evtype) + event = self._events[fileno].pop(evtype, None) + if event is None: + return try: - self._delete_events([event]) + self._delete_events((event,)) except OSError: pass @@ -111,4 +112,4 @@ class Hub(BaseHub): raise except: self.squelch_exception(fileno, sys.exc_info()) - clear_sys_exc_info() + support.clear_sys_exc_info() |
