Commit 4a949a33 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 9f07143c
...@@ -18,7 +18,9 @@ General ...@@ -18,7 +18,9 @@ General
ZEO ZEO
--- ---
- - (3.9.0a1) 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".
Transactions Transactions
------------ ------------
......
...@@ -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