mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
gh-137384: fix crash when accessing warnings state late in runtime shutdown (#138027)
This commit is contained in:
parent
5b0f00e616
commit
b9bcd02e9f
3 changed files with 18 additions and 1 deletions
|
|
@ -1580,6 +1580,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
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Fix a crash when using the :mod:`warnings` module in a finalizer at shutdown. Patch by Kumar Aditya.
|
||||
|
|
@ -805,7 +805,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
|
||||
|
|
@ -815,6 +814,10 @@ interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate)
|
|||
/* Last garbage collection on this interpreter */
|
||||
_PyGC_CollectNoFail(tstate);
|
||||
_PyGC_Fini(interp);
|
||||
|
||||
// Finalize warnings after last gc so that any finalizers can
|
||||
// access warnings state
|
||||
_PyWarnings_Fini(interp);
|
||||
struct _PyExecutorObject *cold = interp->cold_executor;
|
||||
if (cold != NULL) {
|
||||
interp->cold_executor = NULL;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue