diff options
author | Steve Dower <steve.dower@python.org> | 2019-05-29 15:20:35 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-29 15:20:35 (GMT) |
commit | 9ddc416e9f6635376312c3615193f19480ac772a (patch) | |
tree | 826849e61bb4352e384bc842a4626e5c266ba05d /Lib/test/libregrtest | |
parent | d8b755167235e0621814eb5ac39163b3db6879bb (diff) | |
download | cpython-9ddc416e9f6635376312c3615193f19480ac772a.zip cpython-9ddc416e9f6635376312c3615193f19480ac772a.tar.gz cpython-9ddc416e9f6635376312c3615193f19480ac772a.tar.bz2 |
bpo-36842: Fix reference leak in tests by running out-of-proc (GH-13556)
Diffstat (limited to 'Lib/test/libregrtest')
-rw-r--r-- | Lib/test/libregrtest/setup.py | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/Lib/test/libregrtest/setup.py b/Lib/test/libregrtest/setup.py index 8493114..fb5ac35 100644 --- a/Lib/test/libregrtest/setup.py +++ b/Lib/test/libregrtest/setup.py @@ -83,27 +83,7 @@ def setup_tests(ns): if ns.threshold is not None: gc.set_threshold(ns.threshold) - try: - import msvcrt - except ImportError: - pass - else: - msvcrt.SetErrorMode(msvcrt.SEM_FAILCRITICALERRORS| - msvcrt.SEM_NOALIGNMENTFAULTEXCEPT| - msvcrt.SEM_NOGPFAULTERRORBOX| - msvcrt.SEM_NOOPENFILEERRORBOX) - try: - msvcrt.CrtSetReportMode - except AttributeError: - # release build - pass - else: - for m in [msvcrt.CRT_WARN, msvcrt.CRT_ERROR, msvcrt.CRT_ASSERT]: - if ns.verbose and ns.verbose >= 2: - msvcrt.CrtSetReportMode(m, msvcrt.CRTDBG_MODE_FILE) - msvcrt.CrtSetReportFile(m, msvcrt.CRTDBG_FILE_STDERR) - else: - msvcrt.CrtSetReportMode(m, 0) + suppress_msvcrt_asserts(ns.verbose and ns.verbose >= 2) support.use_resources = ns.use_resources @@ -114,6 +94,31 @@ def setup_tests(ns): sys.addaudithook(_test_audit_hook) +def suppress_msvcrt_asserts(verbose): + try: + import msvcrt + except ImportError: + return + + msvcrt.SetErrorMode(msvcrt.SEM_FAILCRITICALERRORS| + msvcrt.SEM_NOALIGNMENTFAULTEXCEPT| + msvcrt.SEM_NOGPFAULTERRORBOX| + msvcrt.SEM_NOOPENFILEERRORBOX) + try: + msvcrt.CrtSetReportMode + except AttributeError: + # release build + return + + for m in [msvcrt.CRT_WARN, msvcrt.CRT_ERROR, msvcrt.CRT_ASSERT]: + if verbose: + msvcrt.CrtSetReportMode(m, msvcrt.CRTDBG_MODE_FILE) + msvcrt.CrtSetReportFile(m, msvcrt.CRTDBG_FILE_STDERR) + else: + msvcrt.CrtSetReportMode(m, 0) + + + def replace_stdout(): """Set stdout encoder error handler to backslashreplace (as stderr error handler) to avoid UnicodeEncodeError when printing a traceback""" |