Skip to content

Commit 5676c92

Browse files
committed
add _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED()
1 parent 0bcd3c7 commit 5676c92

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

Modules/arraymodule.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,8 @@ array_dealloc(arrayobject *op)
739739
static PyObject *
740740
array_richcompare_lock_held(PyObject *v, PyObject *w, int op)
741741
{
742+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(v);
743+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(w);
742744
array_state *state = find_array_state_by_type(Py_TYPE(v));
743745
arrayobject *va, *wa;
744746
PyObject *vi = NULL;
@@ -869,6 +871,7 @@ array_length(arrayobject *a)
869871
static PyObject *
870872
array_item_lock_held(arrayobject *a, Py_ssize_t i)
871873
{
874+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(a);
872875
if (i < 0 || i >= Py_SIZE(a)) {
873876
PyErr_SetString(PyExc_IndexError, "array index out of range");
874877
return NULL;
@@ -963,6 +966,8 @@ array_array___deepcopy___impl(arrayobject *self, PyObject *unused)
963966
static PyObject *
964967
array_concat_lock_held(arrayobject *a, PyObject *bb)
965968
{
969+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(a);
970+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(bb);
966971
array_state *state = find_array_state_by_type(Py_TYPE(a));
967972
Py_ssize_t size;
968973
arrayobject *np;
@@ -1009,6 +1014,7 @@ array_concat(arrayobject *a, PyObject *bb)
10091014
static PyObject *
10101015
array_repeat_lock_held(arrayobject *a, Py_ssize_t n)
10111016
{
1017+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(a);
10121018
array_state *state = find_array_state_by_type(Py_TYPE(a));
10131019

10141020
if (n < 0)
@@ -1079,6 +1085,7 @@ array_del_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
10791085
static int
10801086
array_ass_item_lock_held(arrayobject *a, Py_ssize_t i, PyObject *v)
10811087
{
1088+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(a);
10821089
if (i < 0 || i >= Py_SIZE(a)) {
10831090
PyErr_SetString(PyExc_IndexError,
10841091
"array assignment index out of range");
@@ -1135,6 +1142,8 @@ array_iter_extend(arrayobject *self, PyObject *bb)
11351142
static int
11361143
array_do_extend_lock_held(array_state *state, arrayobject *self, PyObject *bb)
11371144
{
1145+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
1146+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(bb);
11381147
Py_ssize_t size, oldsize, bbsize;
11391148

11401149
if (!array_Check(bb, state))
@@ -1194,6 +1203,7 @@ array_inplace_concat(arrayobject *self, PyObject *bb)
11941203
static PyObject *
11951204
array_inplace_repeat_lock_held(arrayobject *self, Py_ssize_t n)
11961205
{
1206+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
11971207
const Py_ssize_t array_size = Py_SIZE(self);
11981208

11991209
if (array_size > 0 && n != 1 ) {
@@ -1325,6 +1335,7 @@ array_array_index_impl(arrayobject *self, PyObject *v, Py_ssize_t start,
13251335
static int
13261336
array_contains_lock_held(arrayobject *self, PyObject *v)
13271337
{
1338+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
13281339
Py_ssize_t i;
13291340
int cmp;
13301341

@@ -1801,6 +1812,8 @@ array_array_tolist_impl(arrayobject *self)
18011812
static PyObject *
18021813
frombytes_lock_held(arrayobject *self, PyObject *bytes)
18031814
{
1815+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
1816+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(bytes);
18041817
Py_buffer buffer = {NULL, NULL};
18051818
if (PyObject_GetBuffer(bytes, &buffer, PyBUF_SIMPLE) != 0) {
18061819
return NULL;
@@ -2525,6 +2538,7 @@ static PyMethodDef array_methods[] = {
25252538
static PyObject *
25262539
array_repr_lock_held(arrayobject *a)
25272540
{
2541+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(a);
25282542
char typecode;
25292543
PyObject *s, *v = NULL;
25302544
Py_ssize_t len;
@@ -2562,6 +2576,7 @@ array_repr(arrayobject *a)
25622576
static PyObject*
25632577
array_subscr_lock_held(arrayobject* self, PyObject* item)
25642578
{
2579+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
25652580
array_state *state = find_array_state_by_type(Py_TYPE(self));
25662581

25672582
if (PyIndex_Check(item)) {
@@ -2635,6 +2650,10 @@ array_subscr(arrayobject* self, PyObject* item)
26352650
static int
26362651
array_ass_subscr_lock_held(arrayobject* self, PyObject* item, PyObject* value)
26372652
{
2653+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
2654+
if (value != NULL) {
2655+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(value);
2656+
}
26382657
Py_ssize_t start, stop, step, slicelength, needed;
26392658
array_state* state = find_array_state_by_type(Py_TYPE(self));
26402659
arrayobject* other;
@@ -2861,6 +2880,9 @@ array_buffer_relbuf(arrayobject *self, Py_buffer *view)
28612880
static PyObject *
28622881
array_new_internal_lock_held(PyTypeObject *type, PyObject *initial, int c)
28632882
{
2883+
if (initial != NULL) {
2884+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(initial);
2885+
}
28642886
array_state *state = find_array_state_by_type(type);
28652887
PyObject *it = NULL;
28662888
const struct arraydescr *descr;
@@ -3195,6 +3217,7 @@ array_iter(arrayobject *ao)
31953217
static PyObject *
31963218
arrayiter_next_lock_held(arrayiterobject *it)
31973219
{
3220+
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(it);
31983221
arrayobject *ao;
31993222

32003223
#ifndef NDEBUG

0 commit comments

Comments
 (0)