Commit c9d44979 authored by Jim Fulton's avatar Jim Fulton

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".
parent 93d5ca75
......@@ -30,6 +30,10 @@ General
ZEO
---
- (3.8.0b4) 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".
- (3.8a1) ZEO's strategoes for avoiding client cache verification were
improved in the case that servers are restarted. Before, if
transactions were committed after the restart, clients that were up
......
......@@ -53,8 +53,12 @@ def client_loop():
while map:
try:
r = e = list(client_map)
w = [fd for (fd, obj) in map.iteritems() if obj.writable()]
# The next two lines intentionally don't use
# iterators. Other threads can close dispatchers, causeing
# the socket map to shrink.
r = e = client_map.keys()
w = [fd for (fd, obj) in map.items() if obj.writable()]
try:
r, w, e = select.select(r, w, e, client_timeout)
......
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