bpo-43472: Ensure PyInterpreterState_New audit events are raised when called through _xxsubinterpreters module (GH-25506) (GH-25508)

(cherry picked from commit 7b86e47617)

Co-authored-by: Steve Dower <steve.dower@python.org>

Co-authored-by: Steve Dower <steve.dower@python.org>
This commit is contained in:
Miss Islington (bot) 2021-04-28 09:20:40 -07:00 committed by GitHub
parent 629ef0fb9c
commit 0252ce3571
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 6 additions and 3 deletions

View file

@ -26,12 +26,12 @@ always available.
.. function:: addaudithook(hook) .. function:: addaudithook(hook)
Append the callable *hook* to the list of active auditing hooks for the Append the callable *hook* to the list of active auditing hooks for the
current interpreter. current (sub)interpreter.
When an auditing event is raised through the :func:`sys.audit` function, each When an auditing event is raised through the :func:`sys.audit` function, each
hook will be called in the order it was added with the event name and the hook will be called in the order it was added with the event name and the
tuple of arguments. Native hooks added by :c:func:`PySys_AddAuditHook` are tuple of arguments. Native hooks added by :c:func:`PySys_AddAuditHook` are
called first, followed by hooks added in the current interpreter. Hooks called first, followed by hooks added in the current (sub)interpreter. Hooks
can then log the event, raise an exception to abort the operation, can then log the event, raise an exception to abort the operation,
or terminate the process entirely. or terminate the process entirely.

View file

@ -0,0 +1,3 @@
Ensures interpreter-level audit hooks receive the
``cpython.PyInterpreterState_New`` event when called through the
``_xxsubinterpreters`` module.

View file

@ -2010,7 +2010,7 @@ interp_create(PyObject *self, PyObject *args, PyObject *kwds)
} }
// Create and initialize the new interpreter. // Create and initialize the new interpreter.
PyThreadState *save_tstate = PyThreadState_Swap(NULL); PyThreadState *save_tstate = PyThreadState_Get();
// XXX Possible GILState issues? // XXX Possible GILState issues?
PyThreadState *tstate = _Py_NewInterpreter(isolated); PyThreadState *tstate = _Py_NewInterpreter(isolated);
PyThreadState_Swap(save_tstate); PyThreadState_Swap(save_tstate);