fix(vsock): retain owner through gRPC handoff - #81
Merged
Conversation
Keep the descriptor FileHandle alive for the Vminitd client lifetime so its associated Virtualization connection cannot be released while NIO still uses the descriptor. Add a focused ownership regression that fails without the retained handle and passes with the corrected lifetime. Fixes #80 Related: apple#678 Related: apple#911
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.
Type of Change
Motivation and Context
The 0.14.3 release gate produced two
container-runtime-linuxcrashes in separate serial integration paths. Both trapped in SwiftNIO withEBADFwhile a gRPC flush callback calledwritevon a VSOCK descriptor.The existing owner association kept
VZVirtioSocketConnectionalive only for theFileHandlelifetime.Vminitdhanded the raw descriptor to NIO and released that handle, allowing the Virtualization owner to disappear while the gRPC channel was still active. This change retains the handoff handle for the completeVminitdclient lifetime.Closes #80.
Related upstream evidence: apple#678
Related upstream PR: apple#911
Testing
swift test --filter VsockListenerTestsResult: 2 focused tests passed. The new regression was also run against the previous implementation and failed at the expected owner-lifetime assertion.