@@ -739,6 +739,8 @@ array_dealloc(arrayobject *op)
739739static PyObject *
740740array_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)
869871static PyObject *
870872array_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)
963966static PyObject *
964967array_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)
10091014static PyObject *
10101015array_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)
10791085static int
10801086array_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)
11351142static int
11361143array_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)
11941203static PyObject *
11951204array_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,
13251335static int
13261336array_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)
18011812static PyObject *
18021813frombytes_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[] = {
25252538static PyObject *
25262539array_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)
25622576static PyObject *
25632577array_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)
26352650static int
26362651array_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)
28612880static PyObject *
28622881array_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)
31953217static PyObject *
31963218arrayiter_next_lock_held (arrayiterobject * it )
31973219{
3220+ _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED (it );
31983221 arrayobject * ao ;
31993222
32003223#ifndef NDEBUG
0 commit comments