diff --git a/quic/api/QuicTransportBase.cpp b/quic/api/QuicTransportBase.cpp index 6bcc00e67..b40eb3ac2 100644 --- a/quic/api/QuicTransportBase.cpp +++ b/quic/api/QuicTransportBase.cpp @@ -1255,7 +1255,6 @@ folly::Expected, LocalErrorCode> QuicTransportBase::read( } FOLLY_MAYBE_UNUSED auto self = sharedGuard(); SCOPE_EXIT { - checkForClosedStream(); updateReadLooper(); updatePeekLooper(); // read can affect "peek" API updateWriteLooper(true); @@ -1317,7 +1316,6 @@ folly::Expected QuicTransportBase::peek( } FOLLY_MAYBE_UNUSED auto self = sharedGuard(); SCOPE_EXIT { - checkForClosedStream(); updatePeekLooper(); updateWriteLooper(true); }; @@ -1375,7 +1373,6 @@ folly:: } FOLLY_MAYBE_UNUSED auto self = sharedGuard(); SCOPE_EXIT { - checkForClosedStream(); updatePeekLooper(); updateReadLooper(); // consume may affect "read" API updateWriteLooper(true); diff --git a/quic/api/test/QuicTransportBaseTest.cpp b/quic/api/test/QuicTransportBaseTest.cpp index 314f60b81..78383030c 100644 --- a/quic/api/test/QuicTransportBaseTest.cpp +++ b/quic/api/test/QuicTransportBaseTest.cpp @@ -829,6 +829,25 @@ TEST_F(QuicTransportImplTest, onNewBidirectionalStreamCallback) { transport.reset(); } +TEST_F(QuicTransportImplTest, onNewStreamCallbackDoesNotRemove) { + auto readData = folly::IOBuf::copyBuffer("actual stream data"); + StreamId uniStream1 = 2; + StreamId uniStream2 = uniStream1 + kStreamIncrement; + EXPECT_CALL(connCallback, onNewUnidirectionalStream(uniStream1)) + .WillOnce(Invoke([&](StreamId id) { + ASSERT_FALSE(transport->read(id, 100).hasError()); + })); + EXPECT_CALL(connCallback, onNewUnidirectionalStream(uniStream2)) + .WillOnce(Invoke([&](StreamId id) { + ASSERT_FALSE(transport->read(id, 100).hasError()); + })); + transport->addDataToStream( + uniStream1, StreamBuffer(readData->clone(), 0, true)); + transport->addDataToStream( + uniStream2, StreamBuffer(readData->clone(), 0, true)); + transport.reset(); +} + TEST_F(QuicTransportImplTest, onNewBidirectionalStreamStreamOutOfOrder) { InSequence dummy; auto readData = folly::IOBuf::copyBuffer("actual stream data");