Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b1f35bf

Browse files
committed
Mchael Hudson pointed out that the code for detecting changes in
dictionary size was comparing ma_size, the hash table size, which is always a power of two, rather than ma_used, wich changes on each insertion or deletion. Fixed this.
1 parent 542fe56 commit b1f35bf

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

Objects/dictobject.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1479,7 +1479,7 @@ extern PyTypeObject PyDictIter_Type; /* Forward */
14791479
typedef struct {
14801480
PyObject_HEAD
14811481
dictobject *di_dict;
1482-
int di_size;
1482+
int di_used;
14831483
int di_pos;
14841484
binaryfunc di_select;
14851485
} dictiterobject;
@@ -1493,7 +1493,7 @@ dictiter_new(dictobject *dict, binaryfunc select)
14931493
return NULL;
14941494
Py_INCREF(dict);
14951495
di->di_dict = dict;
1496-
di->di_size = dict->ma_size;
1496+
di->di_used = dict->ma_used;
14971497
di->di_pos = 0;
14981498
di->di_select = select;
14991499
return (PyObject *)di;
@@ -1511,7 +1511,7 @@ dictiter_next(dictiterobject *di, PyObject *args)
15111511
{
15121512
PyObject *key, *value;
15131513

1514-
if (di->di_size != di->di_dict->ma_size) {
1514+
if (di->di_used != di->di_dict->ma_used) {
15151515
PyErr_SetString(PyExc_RuntimeError,
15161516
"dictionary changed size during iteration");
15171517
return NULL;
@@ -1546,7 +1546,7 @@ static PyObject *dictiter_iternext(dictiterobject *di)
15461546
{
15471547
PyObject *key, *value;
15481548

1549-
if (di->di_size != di->di_dict->ma_size) {
1549+
if (di->di_used != di->di_dict->ma_used) {
15501550
PyErr_SetString(PyExc_RuntimeError,
15511551
"dictionary changed size during iteration");
15521552
return NULL;

0 commit comments

Comments
 (0)