[Python-checkins] cpython (merge 3.5 -> default): Issue #25410: Made testing that od_fast_nodes and dk_entries are in sync more
serhiy.storchaka
python-checkins at python.org
Fri Nov 6 05:01:04 EST 2015
https://hg.python.org/cpython/rev/c16af48153a4
changeset: 98988:c16af48153a4
parent: 98986:d29c576dc7a0
parent: 98987:45ce4c6b4f36
user: Serhiy Storchaka <storchaka at gmail.com>
date: Fri Nov 06 12:00:43 2015 +0200
summary:
Issue #25410: Made testing that od_fast_nodes and dk_entries are in sync more
reliable.
files:
Objects/odictobject.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/Objects/odictobject.c b/Objects/odictobject.c
--- a/Objects/odictobject.c
+++ b/Objects/odictobject.c
@@ -481,10 +481,12 @@
PyDictObject od_dict; /* the underlying dict */
_ODictNode *od_first; /* first node in the linked list, if any */
_ODictNode *od_last; /* last node in the linked list, if any */
- /* od_fast_nodes and od_resize_sentinel are managed by _odict_resize()
+ /* od_fast_nodes, od_fast_nodes_size and od_resize_sentinel are managed
+ * by _odict_resize().
* Note that we rely on implementation details of dict for both. */
_ODictNode **od_fast_nodes; /* hash table that mirrors the dict table */
- Py_uintptr_t od_resize_sentinel; /* changes if odict should be resized */
+ Py_ssize_t od_fast_nodes_size;
+ void *od_resize_sentinel; /* changes if odict should be resized */
size_t od_state; /* incremented whenever the LL changes */
PyObject *od_inst_dict; /* OrderedDict().__dict__ */
@@ -573,7 +575,8 @@
/* Replace the old fast nodes table. */
_odict_free_fast_nodes(od);
od->od_fast_nodes = fast_nodes;
- od->od_resize_sentinel = (Py_uintptr_t)(((PyDictObject *)od)->ma_keys);
+ od->od_fast_nodes_size = size;
+ od->od_resize_sentinel = ((PyDictObject *)od)->ma_keys;
return 0;
}
@@ -591,7 +594,8 @@
keys = ((PyDictObject *)od)->ma_keys;
/* Ensure od_fast_nodes and dk_entries are in sync. */
- if (od->od_resize_sentinel != (Py_uintptr_t)keys) {
+ if (od->od_resize_sentinel != keys ||
+ od->od_fast_nodes_size != keys->dk_size) {
int resize_res = _odict_resize(od);
if (resize_res < 0)
return -1;
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list