diff --git a/eventlet/debug.py b/eventlet/debug.py index 937e6af..5e44eeb 100644 --- a/eventlet/debug.py +++ b/eventlet/debug.py @@ -4,6 +4,8 @@ debugging Eventlet-powered applications.""" import os import sys import linecache +import string +import inspect __all__ = ['spew', 'unspew', 'format_hub_listeners', 'hub_listener_stacks', 'hub_exceptions', 'tpool_exceptions'] @@ -122,4 +124,4 @@ def tpool_exceptions(state): functions that are executed in it, in addition to raising them like it normally does.""" from eventlet import tpool - tpool.QUIET = not state \ No newline at end of file + tpool.QUIET = not state diff --git a/eventlet/queue.py b/eventlet/queue.py index 3963381..1bf3aef 100644 --- a/eventlet/queue.py +++ b/eventlet/queue.py @@ -181,6 +181,15 @@ class LightQueue(object): def qsize(self): """Return the size of the queue.""" return len(self.queue) + + def resize(self, size): + """Resizes the queue's maximum size. + + If the size is increased, and there are putters waiting, they may be woken up.""" + if size > self.maxsize: + # Maybe wake some stuff up + self._schedule_unlock() + self.maxsize = size def putting(self): """Returns the number of greenthreads that are blocked waiting to put diff --git a/eventlet/support/greenlets.py b/eventlet/support/greenlets.py index 25bb60d..cb75667 100644 --- a/eventlet/support/greenlets.py +++ b/eventlet/support/greenlets.py @@ -4,6 +4,7 @@ try: GreenletExit = greenlet.GreenletExit greenlet = greenlet.greenlet except ImportError, e: + raise try: from py.magic import greenlet getcurrent = greenlet.getcurrent diff --git a/tests/debug_test.py b/tests/debug_test.py index 4afa349..db5e329 100644 --- a/tests/debug_test.py +++ b/tests/debug_test.py @@ -4,12 +4,90 @@ import eventlet from eventlet import debug from eventlet import api from tests import LimitedTestCase, main +from unittest import TestCase try: from cStringIO import StringIO except ImportError: from StringIO import StringIO +class TestSpew(TestCase): + def setUp(self): + self.orig_trace = sys.settrace + sys.settrace = self._settrace + self.tracer = None + + def tearDown(self): + sys.settrace = self.orig_trace + sys.stdout = sys.__stdout__ + + def _settrace(self, cb): + self.tracer = cb + + def test_spew(self): + debug.spew() + self.failUnless(isinstance(self.tracer, debug.Spew)) + + def test_unspew(self): + debug.spew() + debug.unspew() + self.failUnlessEqual(self.tracer, None) + + def test_line(self): + sys.stdout = StringIO() + s = debug.Spew() + f = sys._getframe() + s(f, "line", None) + lineno = f.f_lineno - 1 # -1 here since we called with frame f in the line above + output = sys.stdout.getvalue() + self.failUnless("debug_test:%i" % lineno in output, "Didn't find line %i in %s" % (lineno, output)) + self.failUnless("f=