@@ -1686,6 +1686,10 @@ insert_combined_dict(PyInterpreterState *interp, PyDictObject *mp,
1686
1686
}
1687
1687
}
1688
1688
1689
+ uint64_t new_version = _PyDict_NotifyEvent (
1690
+ interp , PyDict_EVENT_ADDED , mp , key , value );
1691
+ mp -> ma_keys -> dk_version = 0 ;
1692
+
1689
1693
Py_ssize_t hashpos = find_empty_slot (mp -> ma_keys , hash );
1690
1694
dictkeys_set_index (mp -> ma_keys , hashpos , mp -> ma_keys -> dk_nentries );
1691
1695
@@ -1702,6 +1706,7 @@ insert_combined_dict(PyInterpreterState *interp, PyDictObject *mp,
1702
1706
STORE_VALUE (ep , value );
1703
1707
STORE_HASH (ep , hash );
1704
1708
}
1709
+ mp -> ma_version_tag = new_version ;
1705
1710
STORE_KEYS_USABLE (mp -> ma_keys , mp -> ma_keys -> dk_usable - 1 );
1706
1711
STORE_KEYS_NENTRIES (mp -> ma_keys , mp -> ma_keys -> dk_nentries + 1 );
1707
1712
assert (mp -> ma_keys -> dk_usable >= 0 );
@@ -1805,15 +1810,11 @@ insertdict(PyInterpreterState *interp, PyDictObject *mp,
1805
1810
1806
1811
if (ix == DKIX_EMPTY ) {
1807
1812
assert (!_PyDict_HasSplitTable (mp ));
1808
- uint64_t new_version = _PyDict_NotifyEvent (
1809
- interp , PyDict_EVENT_ADDED , mp , key , value );
1810
1813
/* Insert into new slot. */
1811
- mp -> ma_keys -> dk_version = 0 ;
1812
1814
assert (old_value == NULL );
1813
1815
if (insert_combined_dict (interp , mp , hash , key , value ) < 0 ) {
1814
1816
goto Fail ;
1815
1817
}
1816
- mp -> ma_version_tag = new_version ;
1817
1818
STORE_USED (mp , mp -> ma_used + 1 );
1818
1819
ASSERT_CONSISTENT (mp );
1819
1820
return 0 ;
@@ -1854,9 +1855,6 @@ insert_to_emptydict(PyInterpreterState *interp, PyDictObject *mp,
1854
1855
assert (mp -> ma_keys == Py_EMPTY_KEYS );
1855
1856
ASSERT_DICT_LOCKED (mp );
1856
1857
1857
- uint64_t new_version = _PyDict_NotifyEvent (
1858
- interp , PyDict_EVENT_ADDED , mp , key , value );
1859
-
1860
1858
int unicode = PyUnicode_CheckExact (key );
1861
1859
PyDictKeysObject * newkeys = new_keys_object (
1862
1860
interp , PyDict_LOG_MINSIZE , unicode );
@@ -1865,6 +1863,9 @@ insert_to_emptydict(PyInterpreterState *interp, PyDictObject *mp,
1865
1863
Py_DECREF (value );
1866
1864
return -1 ;
1867
1865
}
1866
+ uint64_t new_version = _PyDict_NotifyEvent (
1867
+ interp , PyDict_EVENT_ADDED , mp , key , value );
1868
+
1868
1869
/* We don't decref Py_EMPTY_KEYS here because it is immortal. */
1869
1870
assert (mp -> ma_values == NULL );
1870
1871
@@ -4264,9 +4265,6 @@ dict_setdefault_ref_lock_held(PyObject *d, PyObject *key, PyObject *default_valu
4264
4265
4265
4266
if (ix == DKIX_EMPTY ) {
4266
4267
assert (!_PyDict_HasSplitTable (mp ));
4267
- uint64_t new_version = _PyDict_NotifyEvent (
4268
- interp , PyDict_EVENT_ADDED , mp , key , default_value );
4269
- mp -> ma_keys -> dk_version = 0 ;
4270
4268
value = default_value ;
4271
4269
4272
4270
if (insert_combined_dict (interp , mp , hash , Py_NewRef (key ), Py_NewRef (value )) < 0 ) {
@@ -4279,7 +4277,6 @@ dict_setdefault_ref_lock_held(PyObject *d, PyObject *key, PyObject *default_valu
4279
4277
4280
4278
MAINTAIN_TRACKING (mp , key , value );
4281
4279
STORE_USED (mp , mp -> ma_used + 1 );
4282
- mp -> ma_version_tag = new_version ;
4283
4280
assert (mp -> ma_keys -> dk_usable >= 0 );
4284
4281
ASSERT_CONSISTENT (mp );
4285
4282
if (result ) {
0 commit comments