From 8ff48ca1a0a1bfd5926cd61e01783402935f9cf2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 30 Jun 2024 23:16:31 +0200 Subject: [PATCH 1/2] gh-121084: Call _abc_registry_clear() when checking refleaks dash_R_cleanup() now calls _abc_registry_clear() before calling again register(). --- Lib/test/libregrtest/refleak.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Lib/test/libregrtest/refleak.py b/Lib/test/libregrtest/refleak.py index 25e71305402985..4e55d82a3e3df0 100644 --- a/Lib/test/libregrtest/refleak.py +++ b/Lib/test/libregrtest/refleak.py @@ -246,9 +246,12 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs): abs_classes = filter(isabstract, abs_classes) for abc in abs_classes: for obj in abc.__subclasses__() + [abc]: - for ref in abcs.get(obj, set()): - if ref() is not None: - obj.register(ref()) + refs = abcs.get(obj, None) + if refs is not None: + obj._abc_registry_clear() + for ref in refs: + if ref() is not None: + obj.register(ref()) obj._abc_caches_clear() # Clear caches From f1980cbcb1fc325d380c5d04e36292b23d99ccfc Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 30 Jun 2024 23:25:20 +0200 Subject: [PATCH 2/2] Call ref() only once --- Lib/test/libregrtest/refleak.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Lib/test/libregrtest/refleak.py b/Lib/test/libregrtest/refleak.py index 4e55d82a3e3df0..20b05954c762ff 100644 --- a/Lib/test/libregrtest/refleak.py +++ b/Lib/test/libregrtest/refleak.py @@ -250,8 +250,9 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs): if refs is not None: obj._abc_registry_clear() for ref in refs: - if ref() is not None: - obj.register(ref()) + subclass = ref() + if subclass is not None: + obj.register(subclass) obj._abc_caches_clear() # Clear caches