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:
@@ -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):
|
||||
|
@@ -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."""
|
||||
|
@@ -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'
|
||||
|
@@ -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
|
||||
|
@@ -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.
|
||||
|
Reference in New Issue
Block a user