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