# HG changeset patch # User Steve Dower # Date 1424706973 28800 # Mon Feb 23 07:56:13 2015 -0800 # Node ID e07d076b1e334c28e5d4f144507d19fa09b5d374 # Parent 516d3773ecb22e4c577ca4be8d266f5acc06fa20 Issue 23314: Suppress crash reports in tf_inherit_check.py diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -2151,6 +2151,7 @@ disable the creation of coredump file. """ old_value = None + old_modes = None def __enter__(self): """On Windows, disable Windows Error Reporting dialogs using @@ -2168,6 +2169,21 @@ SEM_NOGPFAULTERRORBOX = 0x02 self.old_value = self._k32.SetErrorMode(SEM_NOGPFAULTERRORBOX) self._k32.SetErrorMode(self.old_value | SEM_NOGPFAULTERRORBOX) + + # Suppress assert dialogs in debug builds + try: + import msvcrt + msvcrt.CrtSetReportMode + except (AttributeError, ImportError): + # no msvcrt or a release build + pass + else: + self.old_modes = {} + for m in [msvcrt.CRT_WARN, msvcrt.CRT_ERROR, msvcrt.CRT_ASSERT]: + old_mode = msvcrt.CrtSetReportMode(m, msvcrt.CRTDBG_MODE_FILE) + old_file = msvcrt.CrtSetReportFile(m, msvcrt.CRTDBG_FILE_STDERR) + self.old_modes[m] = old_mode, old_file + else: if resource is not None: try: @@ -2199,6 +2215,13 @@ if sys.platform.startswith('win'): self._k32.SetErrorMode(self.old_value) + + if self.old_modes: + import msvcrt + for m in [msvcrt.CRT_WARN, msvcrt.CRT_ERROR, msvcrt.CRT_ASSERT]: + old_mode, old_file = self.old_modes[m] + msvcrt.CrtSetReportMode(m, old_mode) + msvcrt.CrtSetReportFile(m, old_file) else: if resource is not None: try: diff --git a/Lib/test/tf_inherit_check.py b/Lib/test/tf_inherit_check.py --- a/Lib/test/tf_inherit_check.py +++ b/Lib/test/tf_inherit_check.py @@ -4,22 +4,24 @@ import sys import os +from test.support import SuppressCrashReport -verbose = (sys.argv[1] == 'v') -try: - fd = int(sys.argv[2]) +with SuppressCrashReport(): + verbose = (sys.argv[1] == 'v') + try: + fd = int(sys.argv[2]) - try: - os.write(fd, b"blat") - except OSError: - # Success -- could not write to fd. - sys.exit(0) - else: + try: + os.write(fd, b"blat") + except OSError: + # Success -- could not write to fd. + sys.exit(0) + else: + if verbose: + sys.stderr.write("fd %d is open in child" % fd) + sys.exit(1) + + except Exception: if verbose: - sys.stderr.write("fd %d is open in child" % fd) + raise sys.exit(1) - -except Exception: - if verbose: - raise - sys.exit(1)