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):
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__

View File

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

View File

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

View File

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