@@ -183,9 +183,6 @@ set_values(PyDictObject *mp, PyDictValues *values)
183183 _Py_atomic_store_ptr_release (& mp -> ma_values , values );
184184}
185185
186- // Defined until we get QSBR
187- #define _PyMem_FreeQsbr PyMem_Free
188-
189186#define LOCK_KEYS (keys ) PyMutex_LockFlags(&keys->dk_mutex, _Py_LOCK_DONT_DETACH)
190187#define UNLOCK_KEYS (keys ) PyMutex_Unlock(&keys->dk_mutex)
191188
@@ -806,7 +803,7 @@ free_keys_object(PyDictKeysObject *keys, bool use_qsbr)
806803{
807804#ifdef Py_GIL_DISABLED
808805 if (use_qsbr ) {
809- _PyMem_FreeQsbr (keys );
806+ _PyMem_FreeDelayed (keys );
810807 return ;
811808 }
812809#endif
@@ -846,7 +843,7 @@ free_values(PyDictValues *values, bool use_qsbr)
846843 int prefix_size = DICT_VALUES_SIZE (values );
847844#ifdef Py_GIL_DISABLED
848845 if (use_qsbr ) {
849- _PyMem_FreeQsbr (((char * )values )- prefix_size );
846+ _PyMem_FreeDelayed (((char * )values )- prefix_size );
850847 return ;
851848 }
852849#endif
@@ -6694,7 +6691,7 @@ _PyObject_StoreInstanceAttribute(PyObject *obj, PyDictValues *values,
66946691#ifdef Py_GIL_DISABLED
66956692 // Try a thread-safe lookup to see if the index is already allocated
66966693 ix = unicodekeys_lookup_unicode_threadsafe (keys , name , hash );
6697- if (ix == DKIX_EMPTY ) {
6694+ if (ix == DKIX_EMPTY || ix == DKIX_KEY_CHANGED ) {
66986695 // Lock keys and do insert
66996696 LOCK_KEYS (keys );
67006697 ix = insert_into_splitdictkeys (keys , name , hash );
0 commit comments