[3.12] gh-100227: Lock Around Adding Global Audit Hooks (gh-105515) (gh-105525)

The risk of a race with this state is relatively low, but we play it safe anyway.
(cherry picked from commit e822a676f1)
This commit is contained in:
Eric Snow 2023-06-08 15:05:47 -06:00 committed by GitHub
parent 2ad2bd8b14
commit b08ea9a561
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 1334 additions and 1300 deletions

View file

@ -380,7 +380,7 @@ _Py_COMP_DIAG_IGNORE_DEPR_DECLS
static const _PyRuntimeState initial = _PyRuntimeState_INIT(_PyRuntime);
_Py_COMP_DIAG_POP
#define NUMLOCKS 6
#define NUMLOCKS 7
#define LOCKS_INIT(runtime) \
{ \
&(runtime)->interpreters.mutex, \
@ -389,6 +389,7 @@ _Py_COMP_DIAG_POP
&(runtime)->unicode_state.ids.lock, \
&(runtime)->imports.extensions.mutex, \
&(runtime)->atexit.mutex, \
&(runtime)->audit_hooks.mutex, \
}
static int
@ -432,7 +433,7 @@ init_runtime(_PyRuntimeState *runtime,
runtime->open_code_hook = open_code_hook;
runtime->open_code_userdata = open_code_userdata;
runtime->audit_hook_head = audit_hook_head;
runtime->audit_hooks.head = audit_hook_head;
PyPreConfig_InitPythonConfig(&runtime->preconfig);
@ -458,7 +459,7 @@ _PyRuntimeState_Init(_PyRuntimeState *runtime)
initialization and interpreter initialization. */
void *open_code_hook = runtime->open_code_hook;
void *open_code_userdata = runtime->open_code_userdata;
_Py_AuditHookEntry *audit_hook_head = runtime->audit_hook_head;
_Py_AuditHookEntry *audit_hook_head = runtime->audit_hooks.head;
// bpo-42882: Preserve next_index value if Py_Initialize()/Py_Finalize()
// is called multiple times.
Py_ssize_t unicode_next_index = runtime->unicode_state.ids.next_index;