forked from apple/swift-nio-ssh
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Motivation: NIO's backpressure management systems rely on catching calls to read() in the ChannelPipeline. This only works if your Channel implementation actually makes those calls to read()! Sadly, SSHChildChannel did not: we instead just recursed directly into the Channel's read0(). While I'm here I also noticed that we produced a lot of channelReadComplete messages in the pipeline unnecessarily. We did this in the service of having a read "fast-path" where new frames would be automatically delivered into the ChannelPipeline without being buffered until channelReadComplete. This fast-path is probably inadvisable: I don't think it provided a meaningful performance benefit anyway, especially as the removal of that fast-path allowed us to suppress unnecessary calls to channelReadComplete, and therefore unnecessary calls to read() as well. Modifications: - Forced autoRead through the pipeline. - Removed read() fast-path. - Suppressed channelReadComplete if no frames were delivered. - Updated tests. Result: Clearer I/O path, better auto-read handling.
- Loading branch information
1 parent
57e4712
commit 7b57cae
Showing
2 changed files
with
60 additions
and
22 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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