Fixed bug in tpool.killall, also another slight bug in the pollhub, and added a new test verification method which will work on every hub but pyevent.

This commit is contained in:
Ryan Williams
2010-01-18 13:28:27 -08:00
parent eb568e4705
commit 02a47eaa7e
4 changed files with 19 additions and 6 deletions

View File

@@ -26,9 +26,14 @@ class FdListener(object):
class DebugListener(FdListener): class DebugListener(FdListener):
def __init__(self, evtype, fileno, cb): def __init__(self, evtype, fileno, cb):
self.where_called = traceback.format_stack() self.where_called = traceback.format_stack()
self.greenlet = greenlet.getcurrent()
super(DebugListener, self).__init__(evtype, fileno, cb) super(DebugListener, self).__init__(evtype, fileno, cb)
def __repr__(self): 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__ __str__ = __repr__

View File

@@ -23,8 +23,8 @@ class Hub(BaseHub):
self.modify = self.poll.register self.modify = self.poll.register
def add(self, evtype, fileno, cb): 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) listener = super(Hub, self).add(evtype, fileno, cb)
if not oldlisteners: if not oldlisteners:
# Means we've added a new listener # Means we've added a new listener

View File

@@ -19,7 +19,6 @@ import sys
from Queue import Empty, Queue from Queue import Empty, Queue
from eventlet import api
from eventlet import event from eventlet import event
from eventlet import greenio from eventlet import greenio
from eventlet import greenthread from eventlet import greenthread
@@ -234,8 +233,8 @@ def killall():
for thr in _threads.values(): for thr in _threads.values():
thr.join() thr.join()
_threads.clear() _threads.clear()
if _coro: if _coro is not None:
api.kill(_coro) greenthread.kill(_coro)
_rfile.close() _rfile.close()
_wfile.close() _wfile.close()
_rfile = None _rfile = None

View File

@@ -106,6 +106,15 @@ class LimitedTestCase(unittest.TestCase):
self.timer.cancel() 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): def find_command(command):
for dir in os.getenv('PATH', '/usr/bin:/usr/sbin').split(os.pathsep): for dir in os.getenv('PATH', '/usr/bin:/usr/sbin').split(os.pathsep):
p = os.path.join(dir, command) p = os.path.join(dir, command)