Explicitly remove remoteIDs from the connections table where appropriate #974
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
what if a lot of time elapses between timedOut and removeconnection?
timedOutconn
s.removeConnection(conn) <---- takes a long time to delete conn
during that "takes a long time" it's possible the runProtocol exited, tcp dialed a new connection, and a new runProtocol is started (as it should!).
but then once "takes a long time" occurs, we are going to call removeconnection on that conn again! not good
this is possible because of the structure locks that removeconnection has to acquire before modifying the connections array
this would cause us to be in runProtocol, but the connections array is nowmissing our tcp connection and nothing can get routed. No redialing will occur because runProtocol is running just fine. monitoringconnectionaging won't bail us out because it also no longer sees the conn
Copied from @fosterseth