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.
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index b374aeb..96d779d 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -1479,7 +1479,7 @@
 typedef struct {
 	PyObject_HEAD
 	dictobject *di_dict;
-	int di_size;
+	int di_used;
 	int di_pos;
 	binaryfunc di_select;
 } dictiterobject;
@@ -1493,7 +1493,7 @@
 		return NULL;
 	Py_INCREF(dict);
 	di->di_dict = dict;
-	di->di_size = dict->ma_size;
+	di->di_used = dict->ma_used;
 	di->di_pos = 0;
 	di->di_select = select;
 	return (PyObject *)di;
@@ -1511,7 +1511,7 @@
 {
 	PyObject *key, *value;
 
-	if (di->di_size != di->di_dict->ma_size) {
+	if (di->di_used != di->di_dict->ma_used) {
 		PyErr_SetString(PyExc_RuntimeError,
 				"dictionary changed size during iteration");
 		return NULL;
@@ -1546,7 +1546,7 @@
 {
 	PyObject *key, *value;
 
-	if (di->di_size != di->di_dict->ma_size) {
+	if (di->di_used != di->di_dict->ma_used) {
 		PyErr_SetString(PyExc_RuntimeError,
 				"dictionary changed size during iteration");
 		return NULL;