[ZEO4] server: Always iterate over snapshot of .connections[storage_id]
Or else such iteration can race with deletion of elements in that list on client disconnection. StorageServer.close was already iteration over snapshot, but StorageServer.invalidate was not. As the result sending out invalidations were subject to race wrt client disconnections, and some invalidations could be skipped to be delivered causing further data corruption. Fixes Bug2 from https://github.com/zopefoundation/ZEO/issues/209
Showing