Commit 86bbe95b authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #23839: Various caches now are cleared before running every test file.

parents 624dd1d1 fbdd9aaf
...@@ -122,17 +122,9 @@ def dash_R(the_module, test, indirect_test, huntrleaks): ...@@ -122,17 +122,9 @@ def dash_R(the_module, test, indirect_test, huntrleaks):
def dash_R_cleanup(fs, ps, pic, zdc, abcs): def dash_R_cleanup(fs, ps, pic, zdc, abcs):
import gc, copyreg import gc, copyreg
import _strptime, linecache import collections.abc
import urllib.parse, urllib.request, mimetypes, doctest
import struct, filecmp, collections.abc
from distutils.dir_util import _path_created
from weakref import WeakSet from weakref import WeakSet
# Clear the warnings registry, so they can be displayed again
for mod in sys.modules.values():
if hasattr(mod, '__warningregistry__'):
del mod.__warningregistry__
# Restore some original values. # Restore some original values.
warnings.filters[:] = fs warnings.filters[:] = fs
copyreg.dispatch_table.clear() copyreg.dispatch_table.clear()
...@@ -159,6 +151,23 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs): ...@@ -159,6 +151,23 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs):
obj._abc_cache.clear() obj._abc_cache.clear()
obj._abc_negative_cache.clear() obj._abc_negative_cache.clear()
clear_caches()
# Collect cyclic trash and read memory statistics immediately after.
func1 = sys.getallocatedblocks
func2 = sys.gettotalrefcount
gc.collect()
return func1(), func2(), fd_count()
def clear_caches():
import gc
# Clear the warnings registry, so they can be displayed again
for mod in sys.modules.values():
if hasattr(mod, '__warningregistry__'):
del mod.__warningregistry__
# Flush standard output, so that buffered data is sent to the OS and # Flush standard output, so that buffered data is sent to the OS and
# associated Python objects are reclaimed. # associated Python objects are reclaimed.
for stream in (sys.stdout, sys.stderr, sys.__stdout__, sys.__stderr__): for stream in (sys.stdout, sys.stderr, sys.__stdout__, sys.__stderr__):
...@@ -166,20 +175,74 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs): ...@@ -166,20 +175,74 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs):
stream.flush() stream.flush()
# Clear assorted module caches. # Clear assorted module caches.
_path_created.clear() # Don't worry about resetting the cache if the module is not loaded
try:
distutils_dir_util = sys.modules['distutils.dir_util']
except KeyError:
pass
else:
distutils_dir_util._path_created.clear()
re.purge() re.purge()
_strptime._regex_cache.clear()
urllib.parse.clear_cache()
urllib.request.urlcleanup()
linecache.clearcache()
mimetypes._default_mime_types()
filecmp._cache.clear()
struct._clearcache()
doctest.master = None
try: try:
import ctypes _strptime = sys.modules['_strptime']
except ImportError: except KeyError:
# Don't worry about resetting the cache if ctypes is not supported pass
else:
_strptime._regex_cache.clear()
try:
urllib_parse = sys.modules['urllib.parse']
except KeyError:
pass
else:
urllib_parse.clear_cache()
try:
urllib_request = sys.modules['urllib.request']
except KeyError:
pass
else:
urllib_request.urlcleanup()
try:
linecache = sys.modules['linecache']
except KeyError:
pass
else:
linecache.clearcache()
try:
mimetypes = sys.modules['mimetypes']
except KeyError:
pass
else:
mimetypes._default_mime_types()
try:
filecmp = sys.modules['filecmp']
except KeyError:
pass
else:
filecmp._cache.clear()
try:
struct = sys.modules['struct']
except KeyError:
pass
else:
struct._clearcache()
try:
doctest = sys.modules['doctest']
except KeyError:
pass
else:
doctest.master = None
try:
ctypes = sys.modules['ctypes']
except KeyError:
pass pass
else: else:
ctypes._reset_cache() ctypes._reset_cache()
...@@ -192,11 +255,7 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs): ...@@ -192,11 +255,7 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs):
for f in typing._cleanups: for f in typing._cleanups:
f() f()
# Collect cyclic trash and read memory statistics immediately after.
func1 = sys.getallocatedblocks
func2 = sys.gettotalrefcount
gc.collect() gc.collect()
return func1(), func2(), fd_count()
def warm_caches(): def warm_caches():
......
...@@ -7,7 +7,7 @@ import time ...@@ -7,7 +7,7 @@ import time
import traceback import traceback
import unittest import unittest
from test import support from test import support
from test.libregrtest.refleak import dash_R from test.libregrtest.refleak import dash_R, clear_caches
from test.libregrtest.save_env import saved_test_environment from test.libregrtest.save_env import saved_test_environment
...@@ -146,6 +146,7 @@ def runtest_inner(ns, test, display_failure=True): ...@@ -146,6 +146,7 @@ def runtest_inner(ns, test, display_failure=True):
else: else:
# Always import it from the test package # Always import it from the test package
abstest = 'test.' + test abstest = 'test.' + test
clear_caches()
with saved_test_environment(test, ns.verbose, ns.quiet, pgo=ns.pgo) as environment: with saved_test_environment(test, ns.verbose, ns.quiet, pgo=ns.pgo) as environment:
start_time = time.time() start_time = time.time()
the_module = importlib.import_module(abstest) the_module = importlib.import_module(abstest)
......
...@@ -55,6 +55,11 @@ Documentation ...@@ -55,6 +55,11 @@ Documentation
- Issue #28513: Documented command-line interface of zipfile. - Issue #28513: Documented command-line interface of zipfile.
Tests
-----
- Issue #23839: Various caches now are cleared before running every test file.
What's New in Python 3.6.0 beta 3 What's New in Python 3.6.0 beta 3
================================= =================================
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment