Repository navigation
Auto-port 5.0: Fix limit of bytes for gathering writes being ignored after the first buffer - #18404
Open
netty-project-bot wants to merge 1 commit into
Open
netty-project-bot wants to merge 1 commit into
netty-project-bot wants to merge 1 commit into
Conversation
… buffer (#18396) Motivation: netty_unix_filedescriptor_writev(...) stops adding buffers to a gathering write once their size exceeds maxBytesToWrite. The first buffer is always added, even if it is bigger than the limit. The comparison `bytesLength > maxBytesToWrite` compared a size_t with a jlong, so the jlong was converted to unsigned. After the first buffer was bigger than maxBytesToWrite, the remaining value became negative and so was converted to a huge unsigned value. The check then never triggered again, and all the remaining buffers (up to IOV_MAX) were added to the writev(...) call. For example, with a limit of 64KB and a first buffer of 1MB, all the buffers that follow were included as well, which ignores the limit that is used to adapt the size of gathering writes. Modification: Compare the length as signed jlong, so a negative remaining value is handled correctly. This is done in all four variants of the loop. Result: The limit of bytes for a gathering write is respected, also if the first buffer is bigger than the limit. (cherry picked from commit 1ed8174)
✅ All tests passed ✅🏷️ Commit: 0349187 Learn more about TestLens at testlens.app/docs. |
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.
Auto-port of #18396 to 5.0
Cherry-picked commit: 1ed8174
Motivation:
netty_unix_filedescriptor_writev(...) stops adding buffers to a gathering
write once their size exceeds maxBytesToWrite. The first buffer is always
added, even if it is bigger than the limit. The comparison
bytesLength > maxBytesToWritecompared a size_t with a jlong, so thejlong was converted to unsigned. After the first buffer was bigger than
maxBytesToWrite, the remaining value became negative and so was converted
to a huge unsigned value. The check then never triggered again, and all
the remaining buffers (up to IOV_MAX) were added to the writev(...) call.
For example, with a limit of 64KB and a first buffer of 1MB, all the
buffers that follow were included as well, which ignores the limit that
is used to adapt the size of gathering writes.
Modification:
Compare the length as signed jlong, so a negative remaining value is
handled correctly. This is done in all four variants of the loop.
Result:
The limit of bytes for a gathering write is respected, also if the first
buffer is bigger than the limit.