From 0acd3b6d6291ac47a20a77586025bc0a7448ce39 Mon Sep 17 00:00:00 2001 From: v2ray Date: Thu, 14 Jul 2016 17:38:20 +0200 Subject: [PATCH] improve sending performance --- transport/internet/kcp/sending.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/transport/internet/kcp/sending.go b/transport/internet/kcp/sending.go index 63fdf325..f3901c33 100644 --- a/transport/internet/kcp/sending.go +++ b/transport/internet/kcp/sending.go @@ -206,6 +206,9 @@ func (this *SendingQueue) Pop() *alloc.Buffer { if this.start == this.cap { this.start = 0 } + if this.IsEmpty() { + this.start = 0 + } return seg } @@ -301,6 +304,18 @@ func (this *SendingWorker) ProcessSegment(current uint32, seg *AckSegment) { this.remoteNextNumber = seg.ReceivingWindow } this.ProcessReceivingNextWithoutLock(seg.ReceivingNext) + + for !this.queue.IsEmpty() && !this.window.IsFull() { + seg := NewDataSegment() + seg.Data = this.queue.Pop() + seg.Number = this.nextNumber + seg.timeout = current + seg.ackSkipped = 0 + seg.transmit = 0 + this.window.Push(seg) + this.nextNumber++ + } + var maxack uint32 for i := 0; i < int(seg.Count); i++ { timestamp := seg.TimestampList[i]