mirror of
https://github.com/python/cpython.git
synced 2025-10-23 15:12:02 +00:00
gh-112062: Make _struct
module thread-safe in --disable-gil
builds (#112094)
* gh-112062: Make `_struct` module thread-safe in --disable-gil builds
This commit is contained in:
parent
55f3cce821
commit
4744f59a5e
1 changed files with 6 additions and 7 deletions
|
@ -2250,12 +2250,6 @@ cache_struct_converter(PyObject *module, PyObject *fmt, PyStructObject **ptr)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state->cache == NULL) {
|
|
||||||
state->cache = PyDict_New();
|
|
||||||
if (state->cache == NULL)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
s_object = PyDict_GetItemWithError(state->cache, fmt);
|
s_object = PyDict_GetItemWithError(state->cache, fmt);
|
||||||
if (s_object != NULL) {
|
if (s_object != NULL) {
|
||||||
*ptr = (PyStructObject *)Py_NewRef(s_object);
|
*ptr = (PyStructObject *)Py_NewRef(s_object);
|
||||||
|
@ -2288,7 +2282,7 @@ static PyObject *
|
||||||
_clearcache_impl(PyObject *module)
|
_clearcache_impl(PyObject *module)
|
||||||
/*[clinic end generated code: output=ce4fb8a7bf7cb523 input=463eaae04bab3211]*/
|
/*[clinic end generated code: output=ce4fb8a7bf7cb523 input=463eaae04bab3211]*/
|
||||||
{
|
{
|
||||||
Py_CLEAR(get_struct_state(module)->cache);
|
PyDict_Clear(get_struct_state(module)->cache);
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2512,6 +2506,11 @@ _structmodule_exec(PyObject *m)
|
||||||
{
|
{
|
||||||
_structmodulestate *state = get_struct_state(m);
|
_structmodulestate *state = get_struct_state(m);
|
||||||
|
|
||||||
|
state->cache = PyDict_New();
|
||||||
|
if (state->cache == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
state->PyStructType = PyType_FromModuleAndSpec(
|
state->PyStructType = PyType_FromModuleAndSpec(
|
||||||
m, &PyStructType_spec, NULL);
|
m, &PyStructType_spec, NULL);
|
||||||
if (state->PyStructType == NULL) {
|
if (state->PyStructType == NULL) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue