Commit c4c9cd8b 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 7449c3ea
What's new on ZODB 3.7.0c1? What's new on ZODB 3.7.1?
=========================== =========================
Packaging Packaging
--------- ---------
...@@ -19,6 +19,10 @@ Packaging ...@@ -19,6 +19,10 @@ Packaging
ClientStorage ClientStorage
------------- -------------
- (3.7.1) 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.7b4) Added logic to avoid spurious errors from the logging system - (3.7b4) Added logic to avoid spurious errors from the logging system
on exit. on exit.
......
...@@ -52,8 +52,12 @@ def client_loop(): ...@@ -52,8 +52,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