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:
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):

View File

@@ -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."""

View File

@@ -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'

View File

@@ -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

View File

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