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 ...@@ -30,6 +30,10 @@ General
ZEO 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 - (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
transactions were committed after the restart, clients that were up transactions were committed after the restart, clients that were up
......
...@@ -53,8 +53,12 @@ def client_loop(): ...@@ -53,8 +53,12 @@ def client_loop():
while map: while map:
try: 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: try:
r, w, e = select.select(r, w, e, client_timeout) 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