Commit 2d601479 authored by Jim Fulton's avatar Jim Fulton

Fixed bug that can cause the asyncore client loop to fail.

parent 22e4f62a
...@@ -33,9 +33,10 @@ General ...@@ -33,9 +33,10 @@ General
ZEO 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 (hang). This was accomonied by a critical log message along the
lines of: "RuntimeError: dictionary changed size during iteration". 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 - (3.8a1) ZEO's strategoes for avoiding client cache verification were
improved in the case that servers are restarted. Before, if improved in the case that servers are restarted. Before, if
......
...@@ -82,7 +82,10 @@ def client_loop(): ...@@ -82,7 +82,10 @@ def client_loop():
continue continue
if not (r or w or e): 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): if isinstance(obj, Connection):
# Send a heartbeat message as a reply to a # Send a heartbeat message as a reply to a
# non-existent message id. # non-existent message id.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment