@@ -183,9 +183,6 @@ set_values(PyDictObject *mp, PyDictValues *values)
183
183
_Py_atomic_store_ptr_release (& mp -> ma_values , values );
184
184
}
185
185
186
- // Defined until we get QSBR
187
- #define _PyMem_FreeQsbr PyMem_Free
188
-
189
186
#define LOCK_KEYS (keys ) PyMutex_LockFlags(&keys->dk_mutex, _Py_LOCK_DONT_DETACH)
190
187
#define UNLOCK_KEYS (keys ) PyMutex_Unlock(&keys->dk_mutex)
191
188
@@ -806,7 +803,7 @@ free_keys_object(PyDictKeysObject *keys, bool use_qsbr)
806
803
{
807
804
#ifdef Py_GIL_DISABLED
808
805
if (use_qsbr ) {
809
- _PyMem_FreeQsbr (keys );
806
+ _PyMem_FreeDelayed (keys );
810
807
return ;
811
808
}
812
809
#endif
@@ -846,7 +843,7 @@ free_values(PyDictValues *values, bool use_qsbr)
846
843
int prefix_size = DICT_VALUES_SIZE (values );
847
844
#ifdef Py_GIL_DISABLED
848
845
if (use_qsbr ) {
849
- _PyMem_FreeQsbr (((char * )values )- prefix_size );
846
+ _PyMem_FreeDelayed (((char * )values )- prefix_size );
850
847
return ;
851
848
}
852
849
#endif
@@ -6694,7 +6691,7 @@ _PyObject_StoreInstanceAttribute(PyObject *obj, PyDictValues *values,
6694
6691
#ifdef Py_GIL_DISABLED
6695
6692
// Try a thread-safe lookup to see if the index is already allocated
6696
6693
ix = unicodekeys_lookup_unicode_threadsafe (keys , name , hash );
6697
- if (ix == DKIX_EMPTY ) {
6694
+ if (ix == DKIX_EMPTY || ix == DKIX_KEY_CHANGED ) {
6698
6695
// Lock keys and do insert
6699
6696
LOCK_KEYS (keys );
6700
6697
ix = insert_into_splitdictkeys (keys , name , hash );
0 commit comments