Fixed some exc-related issues, some others remain.
This commit is contained in:
@@ -32,8 +32,9 @@ def check_hub():
|
|||||||
api.sleep(0)
|
api.sleep(0)
|
||||||
api.sleep(0)
|
api.sleep(0)
|
||||||
hub = api.get_hub()
|
hub = api.get_hub()
|
||||||
for dct in hub.readers, hub.writers, hub.excs:
|
for nm in 'readers', 'writers', 'excs':
|
||||||
assert not dct, repr(dct)
|
dct = getattr(hub, nm)
|
||||||
|
assert not dct, "hub.%s not empty: %s" % (nm, dct)
|
||||||
# Stop the runloop
|
# Stop the runloop
|
||||||
api.get_hub().abort()
|
api.get_hub().abort()
|
||||||
api.sleep(0)
|
api.sleep(0)
|
||||||
@@ -74,12 +75,11 @@ class TestApi(tests.TestCase):
|
|||||||
check_hub()
|
check_hub()
|
||||||
|
|
||||||
def test_server(self):
|
def test_server(self):
|
||||||
|
connected = []
|
||||||
server = api.tcp_listener(('0.0.0.0', 0))
|
server = api.tcp_listener(('0.0.0.0', 0))
|
||||||
bound_port = server.getsockname()[1]
|
bound_port = server.getsockname()[1]
|
||||||
connected = []
|
|
||||||
|
|
||||||
def accept_twice((conn, addr)):
|
def accept_twice((conn, addr)):
|
||||||
print 'connected'
|
|
||||||
connected.append(True)
|
connected.append(True)
|
||||||
conn.close()
|
conn.close()
|
||||||
if len(connected) == 2:
|
if len(connected) == 2:
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ from eventlet import hub
|
|||||||
|
|
||||||
import greenlet
|
import greenlet
|
||||||
|
|
||||||
|
# XXX for debugging only
|
||||||
|
#raise ImportError()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# use rel if it's available
|
# use rel if it's available
|
||||||
import rel
|
import rel
|
||||||
@@ -68,20 +71,16 @@ class Hub(hub.BaseHub):
|
|||||||
evt = event.write(fileno, write, fileno)
|
evt = event.write(fileno, write, fileno)
|
||||||
evt.add()
|
evt.add()
|
||||||
self.writers[fileno] = evt, write
|
self.writers[fileno] = evt, write
|
||||||
|
|
||||||
|
if exc:
|
||||||
|
self.excs[fileno] = exc
|
||||||
|
|
||||||
def remove_descriptor(self, fileno):
|
def remove_descriptor(self, fileno):
|
||||||
for queue in (self.readers, self.writers):
|
for queue in (self.readers, self.writers):
|
||||||
tpl = queue.pop(fileno, None)
|
tpl = queue.pop(fileno, None)
|
||||||
if tpl is not None:
|
if tpl is not None:
|
||||||
tpl[0].delete()
|
tpl[0].delete()
|
||||||
|
self.excs.pop(fileno, None)
|
||||||
def exc_descriptor(self, fileno):
|
|
||||||
for queue in (self.readers, self.writers):
|
|
||||||
tpl = queue.pop(fileno, None)
|
|
||||||
if tpl is not None:
|
|
||||||
evt, cb = tpl
|
|
||||||
evt.delete()
|
|
||||||
cb(fileno)
|
|
||||||
|
|
||||||
def signal_received(self, signal):
|
def signal_received(self, signal):
|
||||||
self.interrupted = True
|
self.interrupted = True
|
||||||
|
|||||||
Reference in New Issue
Block a user