summaryrefslogtreecommitdiffstats
path: root/Objects/dictobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/dictobject.c')
-rw-r--r--Objects/dictobject.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 51903ab..c58d07b 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -236,11 +236,6 @@ static int dictresize(PyDictObject *mp, uint8_t log_newsize, int unicode);
static PyObject* dict_iter(PyDictObject *dict);
-/*Global counter used to set ma_version_tag field of dictionary.
- * It is incremented each time that a dictionary is created and each
- * time that a dictionary is modified. */
-uint64_t _pydict_global_version = 0;
-
#include "clinic/dictobject.c.h"
@@ -5658,17 +5653,15 @@ _PyDictKeys_DecRef(PyDictKeysObject *keys)
dictkeys_decref(keys);
}
-static uint32_t next_dict_keys_version = 2;
-
uint32_t _PyDictKeys_GetVersionForCurrentState(PyDictKeysObject *dictkeys)
{
if (dictkeys->dk_version != 0) {
return dictkeys->dk_version;
}
- if (next_dict_keys_version == 0) {
+ if (_PyRuntime.dict_state.next_keys_version == 0) {
return 0;
}
- uint32_t v = next_dict_keys_version++;
+ uint32_t v = _PyRuntime.dict_state.next_keys_version++;
dictkeys->dk_version = v;
return v;
}
@@ -5680,7 +5673,7 @@ validate_watcher_id(PyInterpreterState *interp, int watcher_id)
PyErr_Format(PyExc_ValueError, "Invalid dict watcher ID %d", watcher_id);
return -1;
}
- if (!interp->dict_watchers[watcher_id]) {
+ if (!interp->dict_state.watchers[watcher_id]) {
PyErr_Format(PyExc_ValueError, "No dict watcher set for ID %d", watcher_id);
return -1;
}
@@ -5723,8 +5716,8 @@ PyDict_AddWatcher(PyDict_WatchCallback callback)
PyInterpreterState *interp = _PyInterpreterState_GET();
for (int i = 0; i < DICT_MAX_WATCHERS; i++) {
- if (!interp->dict_watchers[i]) {
- interp->dict_watchers[i] = callback;
+ if (!interp->dict_state.watchers[i]) {
+ interp->dict_state.watchers[i] = callback;
return i;
}
}
@@ -5740,7 +5733,7 @@ PyDict_ClearWatcher(int watcher_id)
if (validate_watcher_id(interp, watcher_id)) {
return -1;
}
- interp->dict_watchers[watcher_id] = NULL;
+ interp->dict_state.watchers[watcher_id] = NULL;
return 0;
}
@@ -5754,7 +5747,7 @@ _PyDict_SendEvent(int watcher_bits,
PyInterpreterState *interp = _PyInterpreterState_GET();
for (int i = 0; i < DICT_MAX_WATCHERS; i++) {
if (watcher_bits & 1) {
- PyDict_WatchCallback cb = interp->dict_watchers[i];
+ PyDict_WatchCallback cb = interp->dict_state.watchers[i];
if (cb && (cb(event, (PyObject*)mp, key, value) < 0)) {
// some dict modification paths (e.g. PyDict_Clear) can't raise, so we
// can't propagate exceptions from dict watchers.