diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-01-12 17:21:35 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-01-12 17:21:35 -0500 |
| commit | 576224edd01f96bb505f9162282cfa9ba6efcb46 (patch) | |
| tree | 80606787b39fd81dea233a197f655277c6a246d5 /test/base | |
| parent | 56b1f4c8845373b6680d6ab09dcefe36eaeb12fb (diff) | |
| download | sqlalchemy-576224edd01f96bb505f9162282cfa9ba6efcb46.tar.gz | |
- add workaround for sqlite memusage tests, so no longer need to count to 220/skip tests
- Fixed potential memory leak which could occur if an
arbitrary number of :class:`.sessionmaker` objects
were created. The anonymous subclass created by
the sessionmaker, when dereferenced, would not be garbage
collected due to remaining class-level references from the
event package. This issue also applies to any custom system
that made use of ad-hoc subclasses in conjunction with
an event dispatcher. Also in 0.7.10. [ticket:2650]
Diffstat (limited to 'test/base')
| -rw-r--r-- | test/base/test_events.py | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/test/base/test_events.py b/test/base/test_events.py index eb58f5183..4efb30aba 100644 --- a/test/base/test_events.py +++ b/test/base/test_events.py @@ -2,8 +2,9 @@ from sqlalchemy.testing import eq_, assert_raises, assert_raises_message, \ is_, is_not_ -from sqlalchemy import event, exc, util +from sqlalchemy import event, exc from sqlalchemy.testing import fixtures +from sqlalchemy.testing.util import gc_collect class EventsTest(fixtures.TestBase): """Test class- and instance-level event registration.""" @@ -359,6 +360,31 @@ class CustomTargetsTest(fixtures.TestBase): listen, "event_one", self.Target ) +class SubclassGrowthTest(fixtures.TestBase): + """test that ad-hoc subclasses are garbage collected.""" + + def setUp(self): + class TargetEvents(event.Events): + def some_event(self, x, y): + pass + + class Target(object): + dispatch = event.dispatcher(TargetEvents) + + self.Target = Target + + def test_subclass(self): + class SubTarget(self.Target): + pass + + st = SubTarget() + st.dispatch.some_event(1, 2) + del st + del SubTarget + gc_collect() + eq_(self.Target.__subclasses__(), []) + + class ListenOverrideTest(fixtures.TestBase): """Test custom listen functions which change the listener function signature.""" |
