remember stderr fileno in config.stash to be restored on faulthandler teardown
This commit is contained in:
parent
13e5ef0102
commit
e340a075e5
|
@ -0,0 +1 @@
|
||||||
|
Handle an edge case where :data:`sys.stderr` and :data:`sys.__stderr__` might already be closed when :ref:`faulthandler` is tearing down.
|
|
@ -9,6 +9,7 @@ from _pytest.nodes import Item
|
||||||
from _pytest.stash import StashKey
|
from _pytest.stash import StashKey
|
||||||
|
|
||||||
|
|
||||||
|
fault_handler_original_stderr_fd_key = StashKey[int]()
|
||||||
fault_handler_stderr_fd_key = StashKey[int]()
|
fault_handler_stderr_fd_key = StashKey[int]()
|
||||||
fault_handler_originally_enabled_key = StashKey[bool]()
|
fault_handler_originally_enabled_key = StashKey[bool]()
|
||||||
|
|
||||||
|
@ -24,7 +25,9 @@ def pytest_addoption(parser: Parser) -> None:
|
||||||
def pytest_configure(config: Config) -> None:
|
def pytest_configure(config: Config) -> None:
|
||||||
import faulthandler
|
import faulthandler
|
||||||
|
|
||||||
config.stash[fault_handler_stderr_fd_key] = os.dup(get_stderr_fileno())
|
stderr_fileno = get_stderr_fileno()
|
||||||
|
config.stash[fault_handler_original_stderr_fd_key] = stderr_fileno
|
||||||
|
config.stash[fault_handler_stderr_fd_key] = os.dup(stderr_fileno)
|
||||||
config.stash[fault_handler_originally_enabled_key] = faulthandler.is_enabled()
|
config.stash[fault_handler_originally_enabled_key] = faulthandler.is_enabled()
|
||||||
faulthandler.enable(file=config.stash[fault_handler_stderr_fd_key])
|
faulthandler.enable(file=config.stash[fault_handler_stderr_fd_key])
|
||||||
|
|
||||||
|
@ -39,6 +42,10 @@ def pytest_unconfigure(config: Config) -> None:
|
||||||
del config.stash[fault_handler_stderr_fd_key]
|
del config.stash[fault_handler_stderr_fd_key]
|
||||||
if config.stash.get(fault_handler_originally_enabled_key, False):
|
if config.stash.get(fault_handler_originally_enabled_key, False):
|
||||||
# Re-enable the faulthandler if it was originally enabled.
|
# Re-enable the faulthandler if it was originally enabled.
|
||||||
|
if fault_handler_original_stderr_fd_key in config.stash:
|
||||||
|
faulthandler.enable(config.stash[fault_handler_original_stderr_fd_key])
|
||||||
|
del config.stash[fault_handler_original_stderr_fd_key]
|
||||||
|
else:
|
||||||
faulthandler.enable(file=get_stderr_fileno())
|
faulthandler.enable(file=get_stderr_fileno())
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue