Skip to content

Commit 25d3bf0

Browse files
hanidamlajfacebook-github-bot
authored andcommitted
refactor WebTransportImpl::StreamReadHandle::dataAvailable
Summary: refactor WebTransportImpl::StreamReadHandle::dataAvailable for simplicity Reviewed By: joanna-jo Differential Revision: D83162391 fbshipit-source-id: b996269470123525c4d54bb2e42310f48e59cb86
1 parent 4495261 commit 25d3bf0

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

proxygen/lib/http/session/test/HTTPTransactionWebTransportTest.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,12 @@ TEST_F(HTTPTransactionWebTransportTest, ReadStream) {
206206
EXPECT_CALL(transport_, readWebTransportData(_, _)).WillOnce(Invoke([] {
207207
return std::make_pair(makeBuf(32768), false);
208208
}));
209+
// hmm, should WebTransportImpl ensure this isn't invoked if we've rx'd eof or
210+
// is it the transport's responsiblity to not send WTMaxData capsule in this
211+
// case – leaning towards the latter
209212
EXPECT_CALL(transport_, sendWTMaxData(kDefaultWTReceiveWindow + 10 + 65536))
210-
.WillOnce(Return(folly::unit));
213+
.Times(2)
214+
.WillRepeatedly(Return(folly::unit));
211215
implHandle->readAvailable(0);
212216
EXPECT_CALL(transport_, resumeWebTransportIngress(0));
213217
fut = readHandle->readStreamData()

proxygen/lib/http/webtransport/WebTransportImpl.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -410,19 +410,14 @@ WebTransport::FCState WebTransportImpl::StreamReadHandle::dataAvailable(
410410
<< "dataAvailable buflen=" << (data ? data->computeChainDataLength() : 0)
411411
<< " eof=" << uint64_t(eof);
412412

413-
if (data) {
414-
auto dataLen = data->computeChainDataLength();
415-
if (!impl_.recvFlowController_.reserve(dataLen)) {
416-
return WebTransport::FCState::SESSION_CLOSED;
417-
}
413+
auto len = data ? data->computeChainDataLength() : 0;
414+
if (!impl_.recvFlowController_.reserve(len)) {
415+
return WebTransport::FCState::SESSION_CLOSED;
418416
}
419417

420418
if (readPromise_.valid()) {
421-
if (data) {
422-
auto dataLen = data->computeChainDataLength();
423-
impl_.bytesRead_ += dataLen;
424-
impl_.maybeGrantFlowControl();
425-
}
419+
impl_.bytesRead_ += len;
420+
impl_.maybeGrantFlowControl();
426421
readPromise_.setValue(StreamData({.data = std::move(data), .fin = eof}));
427422
readPromise_ = emptyReadPromise();
428423
if (eof) {
@@ -431,7 +426,7 @@ WebTransport::FCState WebTransportImpl::StreamReadHandle::dataAvailable(
431426
return WebTransport::FCState::UNBLOCKED;
432427
}
433428
} else {
434-
buf_.append(std::move(data));
429+
buf_.append(std::move(data)); // ok if nullptr
435430
eof_ = eof;
436431
}
437432
VLOG(4) << "dataAvailable buflen=" << buf_.chainLength();

0 commit comments

Comments
 (0)