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