diff options
-rw-r--r-- | Lib/test/test_gc.py | 13 | ||||
-rw-r--r-- | Modules/gcmodule.c | 3 |
2 files changed, 11 insertions, 5 deletions
diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py index fba9583..1ba5a23 100644 --- a/Lib/test/test_gc.py +++ b/Lib/test/test_gc.py @@ -482,8 +482,7 @@ class GCTests(unittest.TestCase): x.x = x x.y = X('second') del x - if %d: - gc.set_debug(gc.DEBUG_UNCOLLECTABLE) + gc.set_debug(%s) """ def run_command(code): p = subprocess.Popen([sys.executable, "-c", code], @@ -494,13 +493,19 @@ class GCTests(unittest.TestCase): self.assertEqual(stdout.strip(), b"") return strip_python_stderr(stderr) - stderr = run_command(code % 0) + stderr = run_command(code % "0") self.assertIn(b"gc: 2 uncollectable objects at shutdown", stderr) self.assertNotIn(b"[<X 'first'>, <X 'second'>]", stderr) # With DEBUG_UNCOLLECTABLE, the garbage list gets printed - stderr = run_command(code % 1) + stderr = run_command(code % "gc.DEBUG_UNCOLLECTABLE") self.assertIn(b"gc: 2 uncollectable objects at shutdown", stderr) self.assertIn(b"[<X 'first'>, <X 'second'>]", stderr) + # With DEBUG_SAVEALL, no additional message should get printed + # (because gc.garbage also contains normally reclaimable cyclic + # references, and its elements get printed at runtime anyway). + stderr = run_command(code % "gc.DEBUG_SAVEALL") + self.assertNotIn(b"uncollectable objects at shutdown", stderr) + class GCTogglingTests(unittest.TestCase): def setUp(self): diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 7384327..a95bec7 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -1366,7 +1366,8 @@ PyGC_Collect(void) void _PyGC_Fini(void) { - if (garbage != NULL && PyList_GET_SIZE(garbage) > 0) { + if (!(debug & DEBUG_SAVEALL) + && garbage != NULL && PyList_GET_SIZE(garbage) > 0) { PySys_WriteStderr( "gc: " "%" PY_FORMAT_SIZE_T "d uncollectable objects at shutdown:\n", |