Clean up some uncollectable garbage in the test suite.

This commit is contained in:
Ben Darnell 2013-11-06 16:44:15 -05:00
parent 6f56d1a410
commit 372ebb561e
1 changed files with 7 additions and 1 deletions

View File

@ -220,12 +220,13 @@ class StackContextTest(AsyncTestCase):
@gen.engine
def f():
try:
self.callback = yield gen.Callback('a')
with StackContext(functools.partial(self.context, 'c1')):
# This yield is a problem: the generator will be suspended
# and the StackContext's __exit__ is not called yet, so
# the context will be left on _state.contexts for anything
# that runs before the yield resolves.
yield gen.Task(self.io_loop.add_callback)
yield gen.Wait('a')
except StackContextInconsistentError:
# In python <= 3.3, this suspended generator is never garbage
# collected, so it remains suspended in the 'yield' forever.
@ -238,6 +239,11 @@ class StackContextTest(AsyncTestCase):
with self.assertRaises(StackContextInconsistentError):
f()
self.wait()
# Cleanup: to avoid GC warnings (which for some reason only seem
# to show up on py33-asyncio), invoke the callback (which will do
# nothing since the gen.Runner is already finished) and delete it.
self.callback()
del self.callback
@gen_test
def test_yield_outside_with(self):