Don't fatalError if NIOTypedHTTPServerUpgraderStateMachine is in state finished when finding upgrader#3597
Merged
Merged
Conversation
The statemachine can be in the state finished because the connection was closed. I also added a series of tests directly testing the upgrader statemachine
Lukasa
approved these changes
May 14, 2026
Contributor
Lukasa
left a comment
There was a problem hiding this comment.
Excellent stuff, thanks so much @adam-fowler
Contributor
|
Looks like a little tweak is needed. |
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Don't fatalError in NIOTypedHTTPServerUpgraderStateMachine.findingUpgraderCompleted
when the state is.finished`.Motivation:
There is a race where the connection can be closed and the NIOTypedHTTPServerUpgraderHandler can be removed setting the state to
.finishedwhile we are still finding upgraders. And then whenfindingUpgraderCompletedgets called it would fatalError.Modifications:
nilas an action if the state is.finishedwhenfindingUpgraderCompletedis called.NIOTypedHTTPServerUpgraderStateMachinedirectly instead of relying onHTTPServerUpgraderTests. I used Swift Testing for these, not sure what NIO policy on new tests are?Result:
No more crashes and better testing for NIOTypedHTTPServerUpgraderStateMachine