mirror of
https://github.com/python/cpython.git
synced 2026-01-06 07:22:09 +00:00
gh-127945: fix thread safety of ctypes state (#131710)
This fixes thread safety of `array_cache` and `swapped_suffix` by initializing them in module exec to make it thread safety.
This commit is contained in:
parent
96ef4c511f
commit
f1967e7249
1 changed files with 16 additions and 18 deletions
|
|
@ -2148,18 +2148,7 @@ static PyObject *CreateSwappedType(ctypes_state *st, PyTypeObject *type,
|
|||
if (!swapped_args)
|
||||
return NULL;
|
||||
|
||||
if (st->swapped_suffix == NULL) {
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
st->swapped_suffix = PyUnicode_InternFromString("_le");
|
||||
#else
|
||||
st->swapped_suffix = PyUnicode_InternFromString("_be");
|
||||
#endif
|
||||
}
|
||||
if (st->swapped_suffix == NULL) {
|
||||
Py_DECREF(swapped_args);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
assert(st->swapped_suffix != NULL);
|
||||
newname = PyUnicode_Concat(name, st->swapped_suffix);
|
||||
if (newname == NULL) {
|
||||
Py_DECREF(swapped_args);
|
||||
|
|
@ -5113,12 +5102,7 @@ PyCArrayType_from_ctype(ctypes_state *st, PyObject *itemtype, Py_ssize_t length)
|
|||
char name[256];
|
||||
PyObject *len;
|
||||
|
||||
if (st->array_cache == NULL) {
|
||||
st->array_cache = PyDict_New();
|
||||
if (st->array_cache == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
assert(st->array_cache != NULL);
|
||||
len = PyLong_FromSsize_t(length);
|
||||
if (len == NULL)
|
||||
return NULL;
|
||||
|
|
@ -6099,6 +6083,20 @@ _ctypes_mod_exec(PyObject *mod)
|
|||
return -1;
|
||||
}
|
||||
|
||||
st->array_cache = PyDict_New();
|
||||
if (st->array_cache == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
st->swapped_suffix = PyUnicode_InternFromString("_le");
|
||||
#else
|
||||
st->swapped_suffix = PyUnicode_InternFromString("_be");
|
||||
#endif
|
||||
if (st->swapped_suffix == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (_ctypes_add_types(mod) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue