From 8e98ede75d33fbc108f426b8c35b1dab3c2352a9 Mon Sep 17 00:00:00 2001 From: v2ray Date: Fri, 1 Jul 2016 23:27:57 +0200 Subject: [PATCH] shrink buf in time --- transport/internet/kcp/kcp.go | 3 ++- transport/internet/kcp/sending.go | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/transport/internet/kcp/kcp.go b/transport/internet/kcp/kcp.go index 58d4cbe08..9368bb349 100644 --- a/transport/internet/kcp/kcp.go +++ b/transport/internet/kcp/kcp.go @@ -279,6 +279,7 @@ func (kcp *KCP) Input(data []byte) int { kcp.update_ack(_itimediff(kcp.current, ts)) } kcp.parse_ack(sn) + kcp.shrink_buf() if flag == 0 { flag = 1 maxack = sn @@ -300,9 +301,9 @@ func (kcp *KCP) Input(data []byte) int { } kcp.HandleReceivingNext(seg.ReceivinNext) kcp.HandleSendingNext(seg.SendingNext) + kcp.shrink_buf() default: } - kcp.shrink_buf() } if flag != 0 { diff --git a/transport/internet/kcp/sending.go b/transport/internet/kcp/sending.go index d2c891377..6a8ca78b4 100644 --- a/transport/internet/kcp/sending.go +++ b/transport/internet/kcp/sending.go @@ -53,6 +53,10 @@ func (this *SendingWindow) Clear(una uint32) { } func (this *SendingWindow) Remove(idx uint32) { + if this.len == 0 { + return + } + pos := (this.start + idx) % this.cap seg := this.data[pos] if seg == nil { @@ -80,6 +84,9 @@ func (this *SendingWindow) Remove(idx uint32) { } func (this *SendingWindow) HandleFastAck(number uint32) { + if this.len == 0 { + return + } for i := this.start; ; i = this.next[i] { seg := this.data[i]