[3.14] gh-137384: fix crash when accessing warnings state late in runtime shutdown (GH-138027) (#138065)

This commit is contained in:
Kumar Aditya 2025-08-22 19:57:49 +05:30 committed by GitHub
parent c213eb90a0
commit d619015ecd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 17 additions and 1 deletions

View file

@ -1522,6 +1522,19 @@ def test_ast_fini(self):
""")
assert_python_ok("-c", code)
def test_warnings_fini(self):
# See https://github.com/python/cpython/issues/137384
code = textwrap.dedent('''
import asyncio
from contextvars import ContextVar
context_loop = ContextVar("context_loop", default=None)
loop = asyncio.new_event_loop()
context_loop.set(loop)
''')
assert_python_ok("-c", code)
def setUpModule():
global enabled, debug

View file

@ -0,0 +1 @@
Fix a crash when using the :mod:`warnings` module in a finalizer at shutdown. Patch by Kumar Aditya.

View file

@ -914,7 +914,6 @@ interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate)
_Py_ClearExecutorDeletionList(interp);
#endif
_PyAST_Fini(interp);
_PyWarnings_Fini(interp);
_PyAtExit_Fini(interp);
// All Python types must be destroyed before the last GC collection. Python
@ -925,6 +924,9 @@ interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate)
_PyGC_CollectNoFail(tstate);
_PyGC_Fini(interp);
// Finalize warnings after last gc so that any finalizers can
// access warnings state
_PyWarnings_Fini(interp);
/* We don't clear sysdict and builtins until the end of this function.
Because clearing other attributes can execute arbitrary Python code
which requires sysdict and builtins. */