From: Ivan Levkivskyi Date: Sun, 5 Mar 2017 19:19:42 +0000 (+0100) Subject: Backport fix for spurious refleak failures (#482) X-Git-Tag: v3.5.4rc1~298 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=997cc69a6832be4818491e0462896d9572bf71b0;p=python Backport fix for spurious refleak failures (#482) --- diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index c1d85f6a18..12909ec477 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -1480,9 +1480,14 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs): sys._clear_type_cache() # Clear ABC registries, restoring previously saved ABC registries. - for abc in [getattr(collections.abc, a) for a in collections.abc.__all__]: - if not isabstract(abc): - continue + abs_classes = [getattr(collections.abc, a) for a in collections.abc.__all__] + abs_classes = filter(isabstract, abs_classes) + if 'typing' in sys.modules: + t = sys.modules['typing'] + # these classes require special treatment because they do not appear + # in direct subclasses on collections.abc classes + abs_classes = list(abs_classes) + [t.ChainMap, t.Counter, t.DefaultDict] + for abc in abs_classes: for obj in abc.__subclasses__() + [abc]: obj._abc_registry = abcs.get(obj, WeakSet()).copy() obj._abc_cache.clear()