Skip to content

Commit 3af4f9e

Browse files
committed
Add _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED()
1 parent 95231de commit 3af4f9e

1 file changed

Lines changed: 14 additions & 1 deletion

File tree

Modules/_ctypes/_ctypes.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,7 @@ PyType_Spec pyctype_type_spec = {
598598
static PyCArgObject *
599599
StructUnionType_paramfunc_lock_held(ctypes_state *st, CDataObject *self)
600600
{
601+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
601602
PyCArgObject *parg;
602603
PyObject *obj;
603604
void *ptr;
@@ -1563,6 +1564,7 @@ static PyGetSetDef CharArray_getsets[] = {
15631564
static PyObject *
15641565
WCharArray_get_value_lock_held(PyObject *op)
15651566
{
1567+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op);
15661568
Py_ssize_t i;
15671569
PyObject *res;
15681570
CDataObject *self = _CDataObject_CAST(op);
@@ -1587,6 +1589,7 @@ WCharArray_get_value(PyObject *op, void *Py_UNUSED(ignored))
15871589
static int
15881590
WCharArray_set_value_lock_held(PyObject *op, PyObject *value)
15891591
{
1592+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op);
15901593
CDataObject *self = _CDataObject_CAST(op);
15911594

15921595
if (value == NULL) {
@@ -2240,6 +2243,7 @@ static PyObject *CreateSwappedType(ctypes_state *st, PyTypeObject *type,
22402243
static PyCArgObject *
22412244
PyCSimpleType_paramfunc_lock_held(ctypes_state *st, CDataObject *self)
22422245
{
2246+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
22432247
const char *fmt;
22442248
PyCArgObject *parg;
22452249
struct fielddesc *fd;
@@ -2836,6 +2840,7 @@ static PyType_Spec pycfuncptr_type_spec = {
28362840
static CDataObject *
28372841
PyCData_GetContainer_lock_held(CDataObject *self)
28382842
{
2843+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
28392844
while (self->b_base) {
28402845
self = self->b_base;
28412846
}
@@ -2897,6 +2902,7 @@ unique_key(CDataObject *target, Py_ssize_t index)
28972902
static int
28982903
KeepRef_lock_held(CDataObject *target, Py_ssize_t index, PyObject *keep)
28992904
{
2905+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(target);
29002906
int result;
29012907
CDataObject *ob;
29022908
PyObject *key;
@@ -4492,6 +4498,7 @@ _build_result(PyObject *result, PyObject *callargs,
44924498
static PyObject *
44934499
PyCFuncPtr_call_lock_held(PyObject *op, PyObject *inargs, PyObject *kwds)
44944500
{
4501+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op);
44954502
PyObject *restype;
44964503
PyObject *converters;
44974504
PyObject *checker;
@@ -5422,6 +5429,7 @@ static PyObject *
54225429
Pointer_item_lock_held(PyObject *myself, Py_ssize_t index)
54235430
{
54245431
CDataObject *self = _CDataObject_CAST(myself);
5432+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
54255433
Py_ssize_t size;
54265434
Py_ssize_t offset;
54275435
PyObject *proto;
@@ -5471,6 +5479,7 @@ static int
54715479
Pointer_ass_item_lock_held(PyObject *myself, Py_ssize_t index, PyObject *value)
54725480
{
54735481
CDataObject *self = _CDataObject_CAST(myself);
5482+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
54745483
Py_ssize_t size;
54755484
Py_ssize_t offset;
54765485
PyObject *proto;
@@ -5525,6 +5534,7 @@ Pointer_ass_item(PyObject *self, Py_ssize_t index, PyObject *value)
55255534
static PyObject *
55265535
Pointer_get_contents_lock_held(PyObject *self, void *closure)
55275536
{
5537+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
55285538
void *deref = *(void **)_CDataObject_CAST(self)->b_ptr;
55295539
if (deref == NULL) {
55305540
PyErr_SetString(PyExc_ValueError,
@@ -5555,6 +5565,7 @@ Pointer_get_contents(PyObject *self, void *closure)
55555565
static int
55565566
Pointer_set_contents_lock_held(PyObject *op, PyObject *value, void *closure)
55575567
{
5568+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op);
55585569
CDataObject *dst;
55595570
PyObject *keep;
55605571
CDataObject *self = _CDataObject_CAST(op);
@@ -5651,6 +5662,7 @@ static int
56515662
copy_pointer_to_list_lock_held(PyObject *myself, PyObject *np, Py_ssize_t len,
56525663
Py_ssize_t start, Py_ssize_t step)
56535664
{
5665+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(myself);
56545666
Py_ssize_t i;
56555667
size_t cur;
56565668
for (cur = start, i = 0; i < len; cur += step, i++) {
@@ -5804,7 +5816,7 @@ Pointer_subscript(PyObject *myself, PyObject *item)
58045816
return NULL;
58055817

58065818
int res;
5807-
Py_BEGIN_CRITICAL_SECTION(self);
5819+
Py_BEGIN_CRITICAL_SECTION(myself);
58085820
res = copy_pointer_to_list_lock_held(myself, np, len, start, step);
58095821
Py_END_CRITICAL_SECTION();
58105822
if (res < 0) {
@@ -5979,6 +5991,7 @@ cast_check_pointertype(ctypes_state *st, PyObject *arg)
59795991
static PyObject *
59805992
cast_lock_held(void *ptr, PyObject *src, PyObject *ctype)
59815993
{
5994+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(src);
59825995
PyObject *mod = PyType_GetModuleByDef(Py_TYPE(ctype), &_ctypesmodule);
59835996
if (!mod) {
59845997
PyErr_SetString(PyExc_TypeError,

0 commit comments

Comments
 (0)