GH-663: Fix a race in IoSession creation #667
Merged
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.
IoSessions are created asynchronously through an IoConnector. When an IoConnector is closed, all sessions created through it are also to be closed.
Because session creation is asynchronous, it was possible that a newly created session registered on an already closed IoConnector, and then would never be closed.
Prevent this by forcibly closing any newly created IoSession if the IoConnector is already closed when the new session tries to register with the connector.
Add a test that verifies that the connect future the client code sees does not provide a session but is fulfilled either by an exception or by having been cancelled.
Fixes #663.