@@ -2642,15 +2642,15 @@ array_subscr(PyObject *op, PyObject *item)
26422642static int
26432643array_ass_subscr_lock_held (PyObject * op , PyObject * item , PyObject * value )
26442644{
2645+ array_state * state = find_array_state_by_type (Py_TYPE (op ));
26452646 _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED (op );
2646- #ifdef Py_DEBUG
2647- if (value != NULL ) {
2648- _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED (value );
2649- }
2650- #endif
2647+ #ifdef Py_DEBUG
2648+ if (value != NULL && array_Check ( value , state ) ) {
2649+ _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED (value );
2650+ }
2651+ #endif
26512652 arrayobject * self = arrayobject_CAST (op );
26522653 Py_ssize_t start , stop , step , slicelength , needed ;
2653- array_state * state = find_array_state_by_type (Py_TYPE (self ));
26542654 arrayobject * other ;
26552655 int itemsize ;
26562656
@@ -2808,15 +2808,16 @@ static int
28082808array_ass_subscr (PyObject * op , PyObject * item , PyObject * value )
28092809{
28102810 int ret ;
2811- if (value == NULL ) {
2812- Py_BEGIN_CRITICAL_SECTION (op );
2811+ array_state * state = find_array_state_by_type (Py_TYPE (op ));
2812+ if (value != NULL && array_Check (value , state )) {
2813+ Py_BEGIN_CRITICAL_SECTION2 (op , value );
28132814 ret = array_ass_subscr_lock_held (op , item , value );
2814- Py_END_CRITICAL_SECTION ();
2815+ Py_END_CRITICAL_SECTION2 ();
28152816 }
28162817 else {
2817- Py_BEGIN_CRITICAL_SECTION2 (op , value );
2818+ Py_BEGIN_CRITICAL_SECTION (op );
28182819 ret = array_ass_subscr_lock_held (op , item , value );
2819- Py_END_CRITICAL_SECTION2 ();
2820+ Py_END_CRITICAL_SECTION ();
28202821 }
28212822 return ret ;
28222823}
0 commit comments