@@ -1597,7 +1597,7 @@ insertion_resize(PyInterpreterState *interp, PyDictObject *mp, int unicode)
15971597}
15981598
15991599static Py_ssize_t
1600- insert_into_splitdictkeys_locked (PyDictKeysObject * keys , PyObject * name )
1600+ insert_into_splitdictkeys (PyDictKeysObject * keys , PyObject * name )
16011601{
16021602 assert (PyUnicode_CheckExact (name ));
16031603 ASSERT_KEYS_LOCKED (keys );
@@ -1629,15 +1629,6 @@ insert_into_splitdictkeys_locked(PyDictKeysObject *keys, PyObject *name)
16291629 return ix ;
16301630}
16311631
1632- static Py_ssize_t
1633- insert_into_splitdictkeys (PyDictKeysObject * keys , PyObject * name )
1634- {
1635- LOCK_KEYS (keys );
1636- Py_ssize_t ix = insert_into_splitdictkeys_locked (keys , name );
1637- UNLOCK_KEYS (keys );
1638- return ix ;
1639- }
1640-
16411632static inline int
16421633insert_combined_dict (PyInterpreterState * interp , PyDictObject * mp ,
16431634 Py_hash_t hash , PyObject * key , PyObject * value )
@@ -6705,17 +6696,16 @@ _PyObject_StoreInstanceAttribute(PyObject *obj, PyDictValues *values,
67056696 Py_hash_t hash = unicode_get_hash (name );
67066697 if (hash == -1 ) {
67076698 hash = PyUnicode_Type .tp_hash (name );
6708- if (hash == -1 ) {
6709- PyErr_Clear ();
6710- return DKIX_EMPTY ;
6711- }
6699+ assert (hash != -1 );
67126700 }
67136701
67146702 // Try a thread-safe lookup to see if the index is already allocated
67156703 ix = unicodekeys_lookup_unicode_threadsafe (keys , name , hash );
67166704 if (ix == DKIX_EMPTY ) {
6717- // Fall back to a version that will lock and maybe insert
6705+ // Lock keys and do insert
6706+ LOCK_KEYS (keys );
67186707 ix = insert_into_splitdictkeys (keys , name );
6708+ UNLOCK_KEYS (keys );
67196709 }
67206710#else
67216711 ix = insert_into_splitdictkeys (keys , name );
0 commit comments