Fix ConfirmComplete with handshake de-duplication #2307
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.
Previously, we only stored a single Waker, which meant that when the underlying s2n-quic connection/handle was returned to applications multiple times it ended up only waking one of the application tasks.
This modifies the ConfirmComplete logic such that we now store as many Wakers as needed (using Tokio's Semaphore) and wake all of them on final readiness.
Resolved issues:
None.
Call-outs:
This takes a new dependency on tokio's
sync
feature. This feature was previously not enabled in the s2n-quic dependency tree, but seems likely to be fine to enable. If needed, we can gate it behind the dc provider.Testing:
Confirmed locally that a concurrent handshake now successfully confirms from multiple connect with_dedupe handles. Also added a test
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.