@@ -1627,6 +1627,10 @@ insert_combined_dict(PyInterpreterState *interp, PyDictObject *mp,
1627
1627
}
1628
1628
}
1629
1629
1630
+ uint64_t new_version = _PyDict_NotifyEvent (
1631
+ interp , PyDict_EVENT_ADDED , mp , key , value );
1632
+ mp -> ma_keys -> dk_version = 0 ;
1633
+
1630
1634
Py_ssize_t hashpos = find_empty_slot (mp -> ma_keys , hash );
1631
1635
dictkeys_set_index (mp -> ma_keys , hashpos , mp -> ma_keys -> dk_nentries );
1632
1636
@@ -1643,6 +1647,7 @@ insert_combined_dict(PyInterpreterState *interp, PyDictObject *mp,
1643
1647
STORE_VALUE (ep , value );
1644
1648
STORE_HASH (ep , hash );
1645
1649
}
1650
+ mp -> ma_version_tag = new_version ;
1646
1651
STORE_KEYS_USABLE (mp -> ma_keys , mp -> ma_keys -> dk_usable - 1 );
1647
1652
STORE_KEYS_NENTRIES (mp -> ma_keys , mp -> ma_keys -> dk_nentries + 1 );
1648
1653
assert (mp -> ma_keys -> dk_usable >= 0 );
@@ -1745,16 +1750,11 @@ insertdict(PyInterpreterState *interp, PyDictObject *mp,
1745
1750
MAINTAIN_TRACKING (mp , key , value );
1746
1751
1747
1752
if (ix == DKIX_EMPTY ) {
1748
- assert (!_PyDict_HasSplitTable (mp ));
1749
- uint64_t new_version = _PyDict_NotifyEvent (
1750
- interp , PyDict_EVENT_ADDED , mp , key , value );
1751
1753
/* Insert into new slot. */
1752
- mp -> ma_keys -> dk_version = 0 ;
1753
1754
assert (old_value == NULL );
1754
1755
if (insert_combined_dict (interp , mp , hash , key , value ) < 0 ) {
1755
1756
goto Fail ;
1756
1757
}
1757
- mp -> ma_version_tag = new_version ;
1758
1758
STORE_USED (mp , mp -> ma_used + 1 );
1759
1759
ASSERT_CONSISTENT (mp );
1760
1760
return 0 ;
@@ -1795,9 +1795,6 @@ insert_to_emptydict(PyInterpreterState *interp, PyDictObject *mp,
1795
1795
assert (mp -> ma_keys == Py_EMPTY_KEYS );
1796
1796
ASSERT_DICT_LOCKED (mp );
1797
1797
1798
- uint64_t new_version = _PyDict_NotifyEvent (
1799
- interp , PyDict_EVENT_ADDED , mp , key , value );
1800
-
1801
1798
int unicode = PyUnicode_CheckExact (key );
1802
1799
PyDictKeysObject * newkeys = new_keys_object (
1803
1800
interp , PyDict_LOG_MINSIZE , unicode );
@@ -1806,6 +1803,9 @@ insert_to_emptydict(PyInterpreterState *interp, PyDictObject *mp,
1806
1803
Py_DECREF (value );
1807
1804
return -1 ;
1808
1805
}
1806
+ uint64_t new_version = _PyDict_NotifyEvent (
1807
+ interp , PyDict_EVENT_ADDED , mp , key , value );
1808
+
1809
1809
/* We don't decref Py_EMPTY_KEYS here because it is immortal. */
1810
1810
assert (mp -> ma_values == NULL );
1811
1811
@@ -4199,9 +4199,6 @@ dict_setdefault_ref_lock_held(PyObject *d, PyObject *key, PyObject *default_valu
4199
4199
4200
4200
if (ix == DKIX_EMPTY ) {
4201
4201
assert (!_PyDict_HasSplitTable (mp ));
4202
- uint64_t new_version = _PyDict_NotifyEvent (
4203
- interp , PyDict_EVENT_ADDED , mp , key , default_value );
4204
- mp -> ma_keys -> dk_version = 0 ;
4205
4202
value = default_value ;
4206
4203
4207
4204
if (insert_combined_dict (interp , mp , hash , Py_NewRef (key ), Py_NewRef (value )) < 0 ) {
@@ -4214,7 +4211,6 @@ dict_setdefault_ref_lock_held(PyObject *d, PyObject *key, PyObject *default_valu
4214
4211
4215
4212
MAINTAIN_TRACKING (mp , key , value );
4216
4213
STORE_USED (mp , mp -> ma_used + 1 );
4217
- mp -> ma_version_tag = new_version ;
4218
4214
assert (mp -> ma_keys -> dk_usable >= 0 );
4219
4215
ASSERT_CONSISTENT (mp );
4220
4216
if (result ) {
0 commit comments