diff options
Diffstat (limited to 'src/greenlet/tests/test_leaks.py')
| -rw-r--r-- | src/greenlet/tests/test_leaks.py | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/greenlet/tests/test_leaks.py b/src/greenlet/tests/test_leaks.py index 946425b..7ff4e59 100644 --- a/src/greenlet/tests/test_leaks.py +++ b/src/greenlet/tests/test_leaks.py @@ -116,6 +116,15 @@ class TestLeaks(TestCase): for g in gg: self.assertIsNone(g()) + def assertClocksUsed(self): + used = greenlet._greenlet.get_clocks_used_doing_optional_cleanup() + self.assertGreaterEqual(used, 0) + # we don't lose the value + greenlet._greenlet.enable_optional_cleanup(True) + used2 = greenlet._greenlet.get_clocks_used_doing_optional_cleanup() + self.assertEqual(used, used2) + self.assertGreater(greenlet._greenlet.CLOCKS_PER_SEC, 1) + def _check_issue251(self, manually_collect_background=True, explicit_reference_to_switch=False): @@ -216,7 +225,8 @@ class TestLeaks(TestCase): # the ``greenlet.switch`` method still on the stack that we # can't reach to clean up. The C code goes through terrific # lengths to clean that up. - if not explicit_reference_to_switch: + if not explicit_reference_to_switch and greenlet._greenlet.get_clocks_used_doing_optional_cleanup() is not None: + # If cleanup was disabled, though, we may not find it. self.assertEqual(greenlets_after, greenlets_before) if manually_collect_background: # TODO: Figure out how to make this work! @@ -237,9 +247,19 @@ class TestLeaks(TestCase): # done by leakcheck will find it. pass + if greenlet._greenlet.get_clocks_used_doing_optional_cleanup() is not None: + self.assertClocksUsed() + def test_issue251_killing_cross_thread_leaks_list(self): self._check_issue251() + def test_issue251_with_cleanup_disabled(self): + greenlet._greenlet.enable_optional_cleanup(False) + try: + self._check_issue251() + finally: + greenlet._greenlet.enable_optional_cleanup(True) + @fails_leakcheck def test_issue251_issue252_need_to_collect_in_background(self): # Between greenlet 1.1.2 and the next version, this was still @@ -262,6 +282,15 @@ class TestLeaks(TestCase): self._check_issue251(manually_collect_background=False) @fails_leakcheck + def test_issue251_issue252_need_to_collect_in_background_cleanup_disabled(self): + self.expect_greenlet_leak = True + greenlet._greenlet.enable_optional_cleanup(False) + try: + self._check_issue251(manually_collect_background=False) + finally: + greenlet._greenlet.enable_optional_cleanup(True) + + @fails_leakcheck def test_issue251_issue252_explicit_reference_not_collectable(self): self._check_issue251( manually_collect_background=False, |
