diff --git a/eventlet/hubs/hub.py b/eventlet/hubs/hub.py index ba48cdb..2fee198 100644 --- a/eventlet/hubs/hub.py +++ b/eventlet/hubs/hub.py @@ -26,9 +26,14 @@ class FdListener(object): class DebugListener(FdListener): def __init__(self, evtype, fileno, cb): self.where_called = traceback.format_stack() + self.greenlet = greenlet.getcurrent() super(DebugListener, self).__init__(evtype, fileno, cb) def __repr__(self): - return "DebugListener(%r, %r, %r)\n%sEndDebugFdListener" % (self.evtype, self.fileno, self.cb, ''.join(self.where_called)) + return "DebugListener(%r, %r, %r, %r)\n%sEndDebugFdListener" % (self.evtype, + self.fileno, + self.cb, + self.greenlet, + ''.join(self.where_called)) __str__ = __repr__ diff --git a/eventlet/hubs/poll.py b/eventlet/hubs/poll.py index 2a38621..ab214f4 100644 --- a/eventlet/hubs/poll.py +++ b/eventlet/hubs/poll.py @@ -23,8 +23,8 @@ class Hub(BaseHub): self.modify = self.poll.register def add(self, evtype, fileno, cb): - oldlisteners = bool(self.listeners[evtype].get(fileno)) - + oldlisteners = bool(self.listeners[READ].get(fileno) or + self.listeners[WRITE].get(fileno)) listener = super(Hub, self).add(evtype, fileno, cb) if not oldlisteners: # Means we've added a new listener diff --git a/eventlet/tpool.py b/eventlet/tpool.py index da619bd..8b82b19 100644 --- a/eventlet/tpool.py +++ b/eventlet/tpool.py @@ -19,7 +19,6 @@ import sys from Queue import Empty, Queue -from eventlet import api from eventlet import event from eventlet import greenio from eventlet import greenthread @@ -234,8 +233,8 @@ def killall(): for thr in _threads.values(): thr.join() _threads.clear() - if _coro: - api.kill(_coro) + if _coro is not None: + greenthread.kill(_coro) _rfile.close() _wfile.close() _rfile = None diff --git a/tests/__init__.py b/tests/__init__.py index 26d0406..ea2460c 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -106,6 +106,15 @@ class LimitedTestCase(unittest.TestCase): self.timer.cancel() +def verify_hub_empty(): + from eventlet import hubs + hub = hubs.get_hub() + num_readers = len(hub.get_readers()) + num_writers = len(hub.get_writers()) + num_timers = len(hub.get_timers_count()) + assert num_readers == 0 and num_writers == 0, "Readers: %s Writers: %s" % (num_readers, num_writers) + + def find_command(command): for dir in os.getenv('PATH', '/usr/bin:/usr/sbin').split(os.pathsep): p = os.path.join(dir, command)