forked from quic-go/quic-go
don't generate empty STREAM frames in the send stream (#4812)
This commit is contained in:
@@ -277,6 +277,9 @@ func (s *sendStream) popNewOrRetransmittedStreamFrame(maxBytes protocol.ByteCoun
|
||||
}
|
||||
|
||||
f, hasMoreData := s.popNewStreamFrame(maxBytes, sendWindow, v)
|
||||
if f == nil {
|
||||
return nil, hasMoreData, false
|
||||
}
|
||||
if dataLen := f.DataLen(); dataLen > 0 {
|
||||
s.writeOffset += f.DataLen()
|
||||
s.flowController.AddBytesSent(f.DataLen())
|
||||
@@ -290,10 +293,12 @@ func (s *sendStream) popNewOrRetransmittedStreamFrame(maxBytes protocol.ByteCoun
|
||||
|
||||
func (s *sendStream) popNewStreamFrame(maxBytes, sendWindow protocol.ByteCount, v protocol.Version) (*wire.StreamFrame, bool) {
|
||||
if s.nextFrame != nil {
|
||||
maxDataLen := min(sendWindow, s.nextFrame.MaxDataLen(maxBytes, v))
|
||||
if maxDataLen == 0 {
|
||||
return nil, true
|
||||
}
|
||||
nextFrame := s.nextFrame
|
||||
s.nextFrame = nil
|
||||
|
||||
maxDataLen := min(sendWindow, nextFrame.MaxDataLen(maxBytes, v))
|
||||
if nextFrame.DataLen() > maxDataLen {
|
||||
s.nextFrame = wire.GetStreamFrame()
|
||||
s.nextFrame.StreamID = s.streamID
|
||||
|
||||
@@ -122,12 +122,11 @@ func TestSendStreamWriteData(t *testing.T) {
|
||||
n, err = strWithTimeout.Write([]byte("foobaz"))
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 6, n)
|
||||
mockFC.EXPECT().SendWindowSize().Return(protocol.MaxByteCount).Times(2)
|
||||
mockFC.EXPECT().SendWindowSize().Return(protocol.MaxByteCount).Times(3)
|
||||
mockFC.EXPECT().AddBytesSent(protocol.ByteCount(3)).Times(2)
|
||||
// TODO(#4807): check that no empty frames are popped
|
||||
// frame, ok, hasMore = str.popStreamFrame(expectedFrameHeaderLen(streamID, 10), protocol.Version1)
|
||||
// require.False(t, ok)
|
||||
// require.True(t, hasMore)
|
||||
frame, ok, hasMore = str.popStreamFrame(expectedFrameHeaderLen(streamID, 10), protocol.Version1)
|
||||
require.False(t, ok)
|
||||
require.True(t, hasMore)
|
||||
frame, ok, hasMore = str.popStreamFrame(expectedFrameHeaderLen(streamID, 10)+3, protocol.Version1)
|
||||
require.True(t, ok)
|
||||
require.True(t, hasMore)
|
||||
|
||||
Reference in New Issue
Block a user