mirror of
https://github.com/python/cpython.git
synced 2025-10-21 14:12:27 +00:00
bpo-33608: Make sure locks in the runtime are properly re-created. (gh-12245)
This commit is contained in:
parent
5be45a6105
commit
8479a3426e
4 changed files with 40 additions and 40 deletions
|
@ -60,7 +60,8 @@ _PyRuntimeState_Init_impl(_PyRuntimeState *runtime)
|
|||
return _Py_INIT_ERR("Can't initialize threads for cross-interpreter data registry");
|
||||
}
|
||||
|
||||
// runtime->main_thread is set in PyEval_InitThreads().
|
||||
// Set it to the ID of the main thread of the main interpreter.
|
||||
runtime->main_thread = PyThread_get_thread_ident();
|
||||
|
||||
return _Py_INIT_OK();
|
||||
}
|
||||
|
@ -94,6 +95,32 @@ _PyRuntimeState_Fini(_PyRuntimeState *runtime)
|
|||
PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
|
||||
}
|
||||
|
||||
/* This function is called from PyOS_AfterFork_Child to ensure that
|
||||
* newly created child processes do not share locks with the parent.
|
||||
*/
|
||||
|
||||
void
|
||||
_PyRuntimeState_ReInitThreads(void)
|
||||
{
|
||||
// This was initially set in _PyRuntimeState_Init().
|
||||
_PyRuntime.main_thread = PyThread_get_thread_ident();
|
||||
|
||||
_PyRuntime.interpreters.mutex = PyThread_allocate_lock();
|
||||
if (_PyRuntime.interpreters.mutex == NULL) {
|
||||
Py_FatalError("Can't initialize lock for runtime interpreters");
|
||||
}
|
||||
|
||||
_PyRuntime.interpreters.main->id_mutex = PyThread_allocate_lock();
|
||||
if (_PyRuntime.interpreters.main->id_mutex == NULL) {
|
||||
Py_FatalError("Can't initialize ID lock for main interpreter");
|
||||
}
|
||||
|
||||
_PyRuntime.xidregistry.mutex = PyThread_allocate_lock();
|
||||
if (_PyRuntime.xidregistry.mutex == NULL) {
|
||||
Py_FatalError("Can't initialize lock for cross-interpreter data registry");
|
||||
}
|
||||
}
|
||||
|
||||
#define HEAD_LOCK() PyThread_acquire_lock(_PyRuntime.interpreters.mutex, \
|
||||
WAIT_LOCK)
|
||||
#define HEAD_UNLOCK() PyThread_release_lock(_PyRuntime.interpreters.mutex)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue