@@ -1597,19 +1597,11 @@ insertion_resize(PyInterpreterState *interp, PyDictObject *mp, int unicode)
1597
1597
}
1598
1598
1599
1599
static Py_ssize_t
1600
- insert_into_splitdictkeys_locked (PyDictKeysObject * keys , PyObject * name )
1600
+ insert_into_splitdictkeys (PyDictKeysObject * keys , PyObject * name , Py_hash_t hash )
1601
1601
{
1602
1602
assert (PyUnicode_CheckExact (name ));
1603
1603
ASSERT_KEYS_LOCKED (keys );
1604
1604
1605
- Py_hash_t hash = unicode_get_hash (name );
1606
- if (hash == -1 ) {
1607
- hash = PyUnicode_Type .tp_hash (name );
1608
- if (hash == -1 ) {
1609
- PyErr_Clear ();
1610
- return DKIX_EMPTY ;
1611
- }
1612
- }
1613
1605
Py_ssize_t ix = unicodekeys_lookup_unicode (keys , name , hash );
1614
1606
if (ix == DKIX_EMPTY ) {
1615
1607
if (keys -> dk_usable <= 0 ) {
@@ -1629,15 +1621,6 @@ insert_into_splitdictkeys_locked(PyDictKeysObject *keys, PyObject *name)
1629
1621
return ix ;
1630
1622
}
1631
1623
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
-
1641
1624
static inline int
1642
1625
insert_combined_dict (PyInterpreterState * interp , PyDictObject * mp ,
1643
1626
Py_hash_t hash , PyObject * key , PyObject * value )
@@ -6701,24 +6684,23 @@ _PyObject_StoreInstanceAttribute(PyObject *obj, PyDictValues *values,
6701
6684
assert (Py_TYPE (obj )-> tp_flags & Py_TPFLAGS_MANAGED_DICT );
6702
6685
Py_ssize_t ix = DKIX_EMPTY ;
6703
6686
if (PyUnicode_CheckExact (name )) {
6704
- #ifdef Py_GIL_DISABLED
6705
6687
Py_hash_t hash = unicode_get_hash (name );
6706
6688
if (hash == -1 ) {
6707
6689
hash = PyUnicode_Type .tp_hash (name );
6708
- if (hash == -1 ) {
6709
- PyErr_Clear ();
6710
- return DKIX_EMPTY ;
6711
- }
6690
+ assert (hash != -1 );
6712
6691
}
6713
6692
6693
+ #ifdef Py_GIL_DISABLED
6714
6694
// Try a thread-safe lookup to see if the index is already allocated
6715
6695
ix = unicodekeys_lookup_unicode_threadsafe (keys , name , hash );
6716
6696
if (ix == DKIX_EMPTY ) {
6717
- // Fall back to a version that will lock and maybe insert
6718
- ix = insert_into_splitdictkeys (keys , name );
6697
+ // Lock keys and do insert
6698
+ LOCK_KEYS (keys );
6699
+ ix = insert_into_splitdictkeys (keys , name , hash );
6700
+ UNLOCK_KEYS (keys );
6719
6701
}
6720
6702
#else
6721
- ix = insert_into_splitdictkeys (keys , name );
6703
+ ix = insert_into_splitdictkeys (keys , name , hash );
6722
6704 #endif
6723
6705
6724
6706
#ifdef Py_STATS
0 commit comments