summaryrefslogtreecommitdiffstats
path: root/Lib/test/libregrtest
diff options
context:
space:
mode:
authorIvan Levkivskyi <levkivskyi@gmail.com>2017-03-05 18:15:20 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2017-03-05 18:15:20 (GMT)
commit7acffa23c9e7866e5b4b98b8f3c28b14ec1c688c (patch)
tree0449c85e082b4075f5ae1f12da7ee40f70abed91 /Lib/test/libregrtest
parentc6b448b36d22769c684bb3276f85c1b47d15ab63 (diff)
downloadcpython-7acffa23c9e7866e5b4b98b8f3c28b14ec1c688c.zip
cpython-7acffa23c9e7866e5b4b98b8f3c28b14ec1c688c.tar.gz
cpython-7acffa23c9e7866e5b4b98b8f3c28b14ec1c688c.tar.bz2
bpo-29638: Fix spurious refleaks after typing is imported (#469)
Diffstat (limited to 'Lib/test/libregrtest')
-rw-r--r--Lib/test/libregrtest/refleak.py11
1 files changed, 8 insertions, 3 deletions
diff --git a/Lib/test/libregrtest/refleak.py b/Lib/test/libregrtest/refleak.py
index d9f7220..c69fc0f 100644
--- a/Lib/test/libregrtest/refleak.py
+++ b/Lib/test/libregrtest/refleak.py
@@ -143,9 +143,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 of 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()