Fixed some exc-related issues, some others remain.

This commit is contained in:
rdw
2008-03-18 01:36:10 -05:00
parent 93c33c428c
commit bec535123d
2 changed files with 11 additions and 12 deletions

View File

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

View File

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