diff --git a/eventlet/greenio.py b/eventlet/greenio.py index 29a5479..dc85b57 100644 --- a/eventlet/greenio.py +++ b/eventlet/greenio.py @@ -166,11 +166,7 @@ class GreenSocket(object): if self.closed: return self.closed = True - fileno = self.fileno() - try: - res = self.fd.close() - finally: - get_hub().closed(fileno) + res = self.fd.close() return res def connect(self, address): diff --git a/eventlet/hubs/hub.py b/eventlet/hubs/hub.py index 8f75606..778bc20 100644 --- a/eventlet/hubs/hub.py +++ b/eventlet/hubs/hub.py @@ -48,7 +48,6 @@ class BaseHub(object): def __init__(self, clock=time.time): self.listeners = {READ:{}, WRITE:{}} - self.closed_fds = [] self.clock = clock self.greenlet = greenlet.greenlet(self.run) @@ -90,12 +89,6 @@ class BaseHub(object): if listener_list: self.listeners[listener.evtype][listener.fileno] = listener_list - def closed(self, fileno): - """ Clean up any references so that we don't try and - do I/O on a closed fd. - """ - self.closed_fds.append(fileno) - def remove_descriptor(self, fileno): """ Completely remove all listeners for this fileno. For internal use only.""" diff --git a/eventlet/hubs/pyevent.py b/eventlet/hubs/pyevent.py index 88562ac..6f6234e 100644 --- a/eventlet/hubs/pyevent.py +++ b/eventlet/hubs/pyevent.py @@ -43,9 +43,6 @@ class Hub(BaseHub): self.signal(2, lambda signalnum, frame: self.greenlet.parent.throw(KeyboardInterrupt)) self.events_to_add = [] - def closed(self, fd): - pass - def switch(self): cur = greenlet.getcurrent() assert cur is not self.greenlet, 'Cannot switch to MAINLOOP from MAINLOOP' diff --git a/eventlet/hubs/selects.py b/eventlet/hubs/selects.py index 0b4f064..e5ef40b 100644 --- a/eventlet/hubs/selects.py +++ b/eventlet/hubs/selects.py @@ -6,16 +6,16 @@ import time from eventlet.hubs.hub import BaseHub, READ, WRITE try: - BAD_SOCK = (errno.EBADF, errno.WSAENOTSOCK) + BAD_SOCK = set((errno.EBADF, errno.WSAENOTSOCK)) except AttributeError: - BAD_SOCK = (errno.EBADF,) + BAD_SOCK = set((errno.EBADF,)) class Hub(BaseHub): - def _remove_closed_fds(self): - """ Iterate through fds that have had their socket objects recently closed, - removing the ones that are actually closed per the operating system. + def _remove_bad_fds(self): + """ Iterate through fds, removing the ones that are bad per the + operating system. """ - for fd in self.closed_fds: + for fd in self.readers.keys() + self.writers.keys(): try: select.select([fd], [], [], 0) except select.error, e: @@ -31,13 +31,11 @@ class Hub(BaseHub): return try: r, w, er = select.select(readers.keys(), writers.keys(), readers.keys() + writers.keys(), seconds) - self.closed_fds = [] except select.error, e: if e.args[0] == errno.EINTR: return elif e.args[0] in BAD_SOCK: - self._remove_closed_fds() - self.closed_fds = [] + self._remove_bad_fds() return else: raise diff --git a/eventlet/hubs/twistedr.py b/eventlet/hubs/twistedr.py index 7ba1777..0134411 100644 --- a/eventlet/hubs/twistedr.py +++ b/eventlet/hubs/twistedr.py @@ -169,9 +169,6 @@ class BaseTwistedHub(object): def get_timers_count(self): from twisted.internet import reactor return len(reactor.getDelayedCalls()) - - def closed(self, fileno): - pass class TwistedHub(BaseTwistedHub):