diff --git a/eventlet/hubs/hub.py b/eventlet/hubs/hub.py index a1fe679..d07468e 100644 --- a/eventlet/hubs/hub.py +++ b/eventlet/hubs/hub.py @@ -16,13 +16,13 @@ class FdListener(object): self.evtype = evtype self.fileno = fileno self.cb = cb - def __call__(self, *args, **kw): - return self.cb(*args, **kw) def __repr__(self): return "%s(%r, %r, %r)" % (type(self).__name__, self.evtype, self.fileno, self.cb) __str__ = __repr__ +noop = FdListener(READ, 0, lambda x: None) + # in debug mode, track the call site that created the listener class DebugListener(FdListener): def __init__(self, evtype, fileno, cb): diff --git a/eventlet/hubs/poll.py b/eventlet/hubs/poll.py index a1d085f..0d5be7b 100644 --- a/eventlet/hubs/poll.py +++ b/eventlet/hubs/poll.py @@ -6,14 +6,12 @@ time = patcher.original('time') sleep = time.sleep from eventlet.support import get_errno, clear_sys_exc_info -from eventlet.hubs.hub import BaseHub, READ, WRITE +from eventlet.hubs.hub import BaseHub, READ, WRITE, noop EXC_MASK = select.POLLERR | select.POLLHUP READ_MASK = select.POLLIN | select.POLLPRI WRITE_MASK = select.POLLOUT -noop = lambda x: None - class Hub(BaseHub): WAIT_MULTIPLIER=1000.0 # poll.poll's timeout is measured in milliseconds @@ -52,9 +50,7 @@ class Hub(BaseHub): else: try: self.poll.unregister(fileno) - except KeyError: - pass - except (IOError, OSError): + except (KeyError, IOError, OSError): # raised if we try to remove a fileno that was # already removed/invalid pass @@ -63,9 +59,7 @@ class Hub(BaseHub): super(Hub, self).remove_descriptor(fileno) try: self.poll.unregister(fileno) - except (KeyError, ValueError): - pass - except (IOError, OSError): + except (KeyError, ValueError, IOError, OSError): # raised if we try to remove a fileno that was # already removed/invalid pass @@ -89,15 +83,15 @@ class Hub(BaseHub): for fileno, event in presult: try: if event & READ_MASK: - readers.get(fileno, noop)(fileno) + readers.get(fileno, noop).cb(fileno) if event & WRITE_MASK: - writers.get(fileno, noop)(fileno) + writers.get(fileno, noop).cb(fileno) if event & select.POLLNVAL: self.remove_descriptor(fileno) continue if event & EXC_MASK: - readers.get(fileno, noop)(fileno) - writers.get(fileno, noop)(fileno) + readers.get(fileno, noop).cb(fileno) + writers.get(fileno, noop).cb(fileno) except SYSTEM_EXCEPTIONS: raise except: diff --git a/eventlet/hubs/selects.py b/eventlet/hubs/selects.py index 0774dd4..7a0e2ed 100644 --- a/eventlet/hubs/selects.py +++ b/eventlet/hubs/selects.py @@ -5,15 +5,13 @@ from eventlet.support import get_errno, clear_sys_exc_info select = patcher.original('select') time = patcher.original('time') -from eventlet.hubs.hub import BaseHub, READ, WRITE +from eventlet.hubs.hub import BaseHub, READ, WRITE, noop try: BAD_SOCK = set((errno.EBADF, errno.WSAENOTSOCK)) except AttributeError: BAD_SOCK = set((errno.EBADF,)) -noop = lambda x: None - class Hub(BaseHub): def _remove_bad_fds(self): """ Iterate through fds, removing the ones that are bad per the @@ -45,13 +43,13 @@ class Hub(BaseHub): raise for fileno in er: - readers.get(fileno, noop)(fileno) - writers.get(fileno, noop)(fileno) + readers.get(fileno, noop).cb(fileno) + writers.get(fileno, noop).cb(fileno) for listeners, events in ((readers, r), (writers, w)): for fileno in events: try: - listeners.get(fileno, noop)(fileno) + listeners.get(fileno, noop).cb(fileno) except self.SYSTEM_EXCEPTIONS: raise except: