Removed the hub.closed() method because it was only helping out the selects hub. Replaced the functionality in selects with something basically the same.

This commit is contained in:
Ryan Williams
2010-02-09 17:20:34 -08:00
parent 9edb2e2d89
commit 4d8935cca2
5 changed files with 8 additions and 27 deletions

View File

@@ -166,11 +166,7 @@ class GreenSocket(object):
if self.closed: if self.closed:
return return
self.closed = True self.closed = True
fileno = self.fileno()
try:
res = self.fd.close() res = self.fd.close()
finally:
get_hub().closed(fileno)
return res return res
def connect(self, address): def connect(self, address):

View File

@@ -48,7 +48,6 @@ class BaseHub(object):
def __init__(self, clock=time.time): def __init__(self, clock=time.time):
self.listeners = {READ:{}, WRITE:{}} self.listeners = {READ:{}, WRITE:{}}
self.closed_fds = []
self.clock = clock self.clock = clock
self.greenlet = greenlet.greenlet(self.run) self.greenlet = greenlet.greenlet(self.run)
@@ -90,12 +89,6 @@ class BaseHub(object):
if listener_list: if listener_list:
self.listeners[listener.evtype][listener.fileno] = 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): def remove_descriptor(self, fileno):
""" Completely remove all listeners for this fileno. For internal use """ Completely remove all listeners for this fileno. For internal use
only.""" only."""

View File

@@ -43,9 +43,6 @@ class Hub(BaseHub):
self.signal(2, lambda signalnum, frame: self.greenlet.parent.throw(KeyboardInterrupt)) self.signal(2, lambda signalnum, frame: self.greenlet.parent.throw(KeyboardInterrupt))
self.events_to_add = [] self.events_to_add = []
def closed(self, fd):
pass
def switch(self): def switch(self):
cur = greenlet.getcurrent() cur = greenlet.getcurrent()
assert cur is not self.greenlet, 'Cannot switch to MAINLOOP from MAINLOOP' assert cur is not self.greenlet, 'Cannot switch to MAINLOOP from MAINLOOP'

View File

@@ -6,16 +6,16 @@ import time
from eventlet.hubs.hub import BaseHub, READ, WRITE from eventlet.hubs.hub import BaseHub, READ, WRITE
try: try:
BAD_SOCK = (errno.EBADF, errno.WSAENOTSOCK) BAD_SOCK = set((errno.EBADF, errno.WSAENOTSOCK))
except AttributeError: except AttributeError:
BAD_SOCK = (errno.EBADF,) BAD_SOCK = set((errno.EBADF,))
class Hub(BaseHub): class Hub(BaseHub):
def _remove_closed_fds(self): def _remove_bad_fds(self):
""" Iterate through fds that have had their socket objects recently closed, """ Iterate through fds, removing the ones that are bad per the
removing the ones that are actually closed per the operating system. operating system.
""" """
for fd in self.closed_fds: for fd in self.readers.keys() + self.writers.keys():
try: try:
select.select([fd], [], [], 0) select.select([fd], [], [], 0)
except select.error, e: except select.error, e:
@@ -31,13 +31,11 @@ class Hub(BaseHub):
return return
try: try:
r, w, er = select.select(readers.keys(), writers.keys(), readers.keys() + writers.keys(), seconds) r, w, er = select.select(readers.keys(), writers.keys(), readers.keys() + writers.keys(), seconds)
self.closed_fds = []
except select.error, e: except select.error, e:
if e.args[0] == errno.EINTR: if e.args[0] == errno.EINTR:
return return
elif e.args[0] in BAD_SOCK: elif e.args[0] in BAD_SOCK:
self._remove_closed_fds() self._remove_bad_fds()
self.closed_fds = []
return return
else: else:
raise raise

View File

@@ -170,9 +170,6 @@ class BaseTwistedHub(object):
from twisted.internet import reactor from twisted.internet import reactor
return len(reactor.getDelayedCalls()) return len(reactor.getDelayedCalls())
def closed(self, fileno):
pass
class TwistedHub(BaseTwistedHub): class TwistedHub(BaseTwistedHub):
# wrapper around reactor that runs reactor's main loop in a separate greenlet. # wrapper around reactor that runs reactor's main loop in a separate greenlet.