ping: Make ping fault tolerant wrt outbound substreams races #133
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.
We have discovered a race between the TransportService and Protocol interface.
This issue was first seen on the identify protocol:
After looking a bit closely into it, indeed there might be a chance for the following to happen:
TransportEvent::ConnectionEstablished
andTransportEvent::SubstreamOpened
TransportEvent::ConnectionEstablished
event for a disconnected peerPing::on_connection_established
fails to open a substream andpending_open
is never populatedTransportEvent::SubstreamOpened
event which would have panicked litep2pThis PR replaces the
todo!
in case of the race with a warning, and we'll no longer panic.It is still good to capture those as warnings for visibility, even if there's no implied side-effect on our code.