Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

quic: minor cleanups in quic_buffer #34087

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/quic/node_quic_buffer-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ QuicBuffer::QuicBuffer(QuicBuffer&& src) noexcept
src.ended_ = false;
}


QuicBuffer& QuicBuffer::operator=(QuicBuffer&& src) noexcept {
if (this == &src) return *this;
this->~QuicBuffer();
Expand Down
13 changes: 10 additions & 3 deletions src/quic/node_quic_buffer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@ void QuicBufferChunk::MemoryInfo(MemoryTracker* tracker) const {

size_t QuicBuffer::Push(uv_buf_t* bufs, size_t nbufs, DoneCB done) {
size_t len = 0;
if (nbufs == 0 || bufs == nullptr || is_empty(bufs[0])) {
if (UNLIKELY(nbufs == 0)) {
done(0);
return 0;
}
DCHECK_NOT_NULL(bufs);
size_t n = 0;
while (nbufs > 1) {
if (!is_empty(bufs[n])) {
Expand All @@ -30,8 +31,14 @@ size_t QuicBuffer::Push(uv_buf_t* bufs, size_t nbufs, DoneCB done) {
n++;
nbufs--;
}
len += bufs[n].len;
Push(bufs[n], done);
if (!is_empty(bufs[n])) {
Push(bufs[n], done);
len += bufs[n].len;
}
// Special case if all the bufs were empty.
if (UNLIKELY(len == 0))
done(0);

return len;
}

Expand Down
12 changes: 6 additions & 6 deletions src/quic/node_quic_buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ using DoneCB = std::function<void(int)>;

// When data is sent over QUIC, we are required to retain it in memory
// until we receive an acknowledgement that it has been successfully
// acknowledged. The QuicBuffer object is what we use to handle that
// received. The QuicBuffer object is what we use to handle that
// and track until it is acknowledged. To understand the QuicBuffer
// object itself, it is important to understand how ngtcp2 and nghttp3
// handle data that is given to it to serialize into QUIC packets.
Expand Down Expand Up @@ -52,7 +52,7 @@ using DoneCB = std::function<void(int)>;
// QuicBuffer is further complicated by design quirks and limitations
// of the StreamBase API and how it interacts with the JavaScript side.
//
// QuicBuffer is essentially a linked list of QuicBufferChunk instances.
// QuicBuffer is a linked list of QuicBufferChunk instances.
// A single QuicBufferChunk wraps a single non-zero-length uv_buf_t.
// When the QuicBufferChunk is created, we capture the total length
// of the buffer and the total number of bytes remaining to be sent.
Expand All @@ -79,7 +79,7 @@ using DoneCB = std::function<void(int)>;
// along with a callback to be called when the data has
// been consumed.
//
// Any given chunk as a remaining-to-be-acknowledged length (length()) and a
// Any given chunk has a remaining-to-be-acknowledged length (length()) and a
// remaining-to-be-read-length (remaining()). The former tracks the number
// of bytes that have yet to be acknowledged by the QUIC peer. Once the
// remaining-to-be-acknowledged length reaches zero, the done callback
Expand All @@ -88,7 +88,7 @@ using DoneCB = std::function<void(int)>;
// serialized into QUIC packets and sent.
// The remaining-to-be-acknowledged length is adjusted using consume(),
// while the remaining-to-be-ead length is adjusted using seek().
class QuicBufferChunk : public MemoryRetainer {
class QuicBufferChunk final : public MemoryRetainer {
public:
// Default non-op done handler.
static void default_done(int status) {}
Expand Down Expand Up @@ -149,8 +149,8 @@ class QuicBufferChunk : public MemoryRetainer {
friend class QuicBuffer;
};

class QuicBuffer : public bob::SourceImpl<ngtcp2_vec>,
public MemoryRetainer {
class QuicBuffer final : public bob::SourceImpl<ngtcp2_vec>,
public MemoryRetainer {
public:
QuicBuffer() = default;

Expand Down