Fix ServiceChannel auto-close when server initiates session shutdown #5946
Open
afifi-ins wants to merge 1 commit into
Open
Fix ServiceChannel auto-close when server initiates session shutdown #5946afifi-ins wants to merge 1 commit into
afifi-ins wants to merge 1 commit into
Conversation
bb43bf7 to
73bccb1
Compare
0344418 to
e2ef244
Compare
…otnet#5803) When a server gracefully closes its duplex session while the client is idle between calls, the duplex receive pump processes the EndRecord and invokes ServiceChannel.DecrementActivity. Previously this only half-closed the inner session via CloseOutputSession and never transitioned the outer ServiceChannel out of Opened, leaving the channel stuck open indefinitely. DecrementActivity now sends our EndRecord inline (CloseOutputSession) and then schedules a CompleteAutoClose continuation via ActionItem.Schedule so the outer ServiceChannel.Close runs off the receive pump thread (closing inline would deadlock on the SynchronizedMessageSource semaphore). CompleteAutoClose falls back to Abort on Communication/Timeout/InvalidOperation exceptions and swallows ObjectDisposedException. Adds an outerloop integration test (NetTcp duplex) that hosts a server which stops its host after replying to RequestServerShutdown and asserts the client channel transitions to Closed within 10s, with Closing/Closed events firing and no Faulted event. Co-authored-by: Copilot <[email protected]>
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.
…(#5803)
When a server gracefully closes its duplex session while the client is idle between calls, the duplex receive pump processes the EndRecord and invokes ServiceChannel.DecrementActivity. Previously this only half-closed the inner session via CloseOutputSession and never transitioned the outer ServiceChannel out of Opened, leaving the channel stuck open indefinitely.
DecrementActivity now sends our EndRecord inline (CloseOutputSession) and then schedules a CompleteAutoClose continuation via ActionItem.Schedule so the outer ServiceChannel.Close runs off the receive pump thread (closing inline would deadlock on the SynchronizedMessageSource semaphore). CompleteAutoClose falls back to Abort on Communication/Timeout/InvalidOperation exceptions and swallows ObjectDisposedException.
Adds an outerloop integration test (NetTcp duplex) that hosts a server which stops its host after replying to RequestServerShutdown and asserts the client channel transitions to Closed within 10s, with Closing/Closed events firing and no Faulted event.