mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-27 03:41:14 +03:00
Stop cloning retranmssion buffer in Quic PacketRebuilder
Summary: use the BufQueue version of writeStreamFrameData for retransmission. Reviewed By: mjoras Differential Revision: D20920391 fbshipit-source-id: 5fe7017329f801e0ac5428257b9a61000e26e203
This commit is contained in:
committed by
Facebook GitHub Bot
parent
7b1672e164
commit
c3785a6b08
@@ -75,8 +75,7 @@ folly::Optional<PacketEvent> PacketRebuilder::rebuildFromPacket(
|
||||
auto stream = conn_.streamManager->getStream(streamFrame.streamId);
|
||||
if (stream && retransmittable(*stream)) {
|
||||
auto streamData = cloneRetransmissionBuffer(streamFrame, stream);
|
||||
auto bufferLen =
|
||||
streamData ? streamData->computeChainDataLength() : 0;
|
||||
auto bufferLen = streamData ? streamData->chainLength() : 0;
|
||||
auto dataLen = writeStreamFrameHeader(
|
||||
builder_,
|
||||
streamFrame.streamId,
|
||||
@@ -86,7 +85,12 @@ folly::Optional<PacketEvent> PacketRebuilder::rebuildFromPacket(
|
||||
streamFrame.fin);
|
||||
bool ret = dataLen.has_value() && *dataLen == streamFrame.len;
|
||||
if (ret) {
|
||||
writeStreamFrameData(builder_, std::move(streamData), *dataLen);
|
||||
// Writing 0 byte for stream data is legit if the stream frame has
|
||||
// FIN. That's checked in writeStreamFrameHeader.
|
||||
CHECK(streamData || streamFrame.fin);
|
||||
if (streamData) {
|
||||
writeStreamFrameData(builder_, *streamData, *dataLen);
|
||||
}
|
||||
notPureAck = true;
|
||||
writeSuccess = true;
|
||||
break;
|
||||
@@ -216,7 +220,7 @@ Buf PacketRebuilder::cloneCryptoRetransmissionBuffer(
|
||||
return iter->second->data.front()->clone();
|
||||
}
|
||||
|
||||
Buf PacketRebuilder::cloneRetransmissionBuffer(
|
||||
const BufQueue* PacketRebuilder::cloneRetransmissionBuffer(
|
||||
const WriteStreamFrame& frame,
|
||||
const QuicStreamState* stream) {
|
||||
/**
|
||||
@@ -239,7 +243,7 @@ Buf PacketRebuilder::cloneRetransmissionBuffer(
|
||||
DCHECK(!frame.len || !iter->second->data.empty())
|
||||
<< "WriteStreamFrame cloning: frame is not empty but StreamBuffer has"
|
||||
<< " empty data. " << conn_;
|
||||
return (frame.len ? iter->second->data.front()->clone() : nullptr);
|
||||
return frame.len ? &(iter->second->data) : nullptr;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
|
||||
Reference in New Issue
Block a user