[Checkins] SVN: ZODB/branches/3.8/ Fixed bug that can cause the asyncore client loop to fail.

Jim Fulton jim at zope.com
Sat Nov 17 14:53:18 EST 2007


Log message for revision 81901:
  Fixed bug that can cause the asyncore client loop to fail.
  

Changed:
  U   ZODB/branches/3.8/NEWS.txt
  U   ZODB/branches/3.8/src/ZEO/zrpc/connection.py

-=-
Modified: ZODB/branches/3.8/NEWS.txt
===================================================================
--- ZODB/branches/3.8/NEWS.txt	2007-11-17 19:26:10 UTC (rev 81900)
+++ ZODB/branches/3.8/NEWS.txt	2007-11-17 19:53:18 UTC (rev 81901)
@@ -33,9 +33,10 @@
 ZEO
 ---
 
-- (3.8.0b4) Fixed a serious bug that could cause client I/O to stop
+- (3.8.0b4, 3.8.0b5) Fixed a serious bug that could cause client I/O to stop
   (hang). This was accomonied by a critical log message along the
   lines of: "RuntimeError: dictionary changed size during iteration".
+  (In b4, the bug was only partially fixed.)
 
 - (3.8a1) ZEO's strategoes for avoiding client cache verification were
   improved in the case that servers are restarted.  Before, if

Modified: ZODB/branches/3.8/src/ZEO/zrpc/connection.py
===================================================================
--- ZODB/branches/3.8/src/ZEO/zrpc/connection.py	2007-11-17 19:26:10 UTC (rev 81900)
+++ ZODB/branches/3.8/src/ZEO/zrpc/connection.py	2007-11-17 19:53:18 UTC (rev 81901)
@@ -82,7 +82,10 @@
                     continue
 
             if not (r or w or e):
-                for obj in client_map.itervalues():
+                # The line intentionally doesn't use iterators. Other
+                # threads can close dispatchers, causeing the socket
+                # map to shrink.
+                for obj in client_map.values():
                     if isinstance(obj, Connection):
                         # Send a heartbeat message as a reply to a
                         # non-existent message id.



More information about the Checkins mailing list