diff options
author | gVisor bot <gvisor-bot@google.com> | 2021-05-12 21:17:06 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-05-12 21:17:06 +0000 |
commit | beb54fcaf40594fad39bbeb212f066aecef26112 (patch) | |
tree | 139946e311fa96f0695d2b1d0c4753fdc838eb51 /pkg/tcpip/transport/tcp/snd.go | |
parent | 0bf9a1ff877824eacb9df300f67def0babb20c9d (diff) | |
parent | ba6de21539131bbf8116137704259e4d11d2894b (diff) |
Merge release-20210503.0-48-gba6de2153 (automated)
Diffstat (limited to 'pkg/tcpip/transport/tcp/snd.go')
-rw-r--r-- | pkg/tcpip/transport/tcp/snd.go | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/pkg/tcpip/transport/tcp/snd.go b/pkg/tcpip/transport/tcp/snd.go index 2b32cb7b2..f43e86677 100644 --- a/pkg/tcpip/transport/tcp/snd.go +++ b/pkg/tcpip/transport/tcp/snd.go @@ -716,15 +716,14 @@ func (s *sender) maybeSendSegment(seg *segment, limit int, end seqnum.Value) (se // triggering bugs in poorly written DNS // implementations. var nextTooBig bool - for seg.Next() != nil && seg.Next().data.Size() != 0 { - if seg.data.Size()+seg.Next().data.Size() > available { + for nSeg := seg.Next(); nSeg != nil && nSeg.data.Size() != 0; nSeg = seg.Next() { + if seg.data.Size()+nSeg.data.Size() > available { nextTooBig = true break } - seg.data.Append(seg.Next().data) - - // Consume the segment that we just merged in. - s.writeList.Remove(seg.Next()) + seg.merge(nSeg) + s.writeList.Remove(nSeg) + nSeg.decRef() } if !nextTooBig && seg.data.Size() < available { // Segment is not full. |