Selaa lähdekoodia

refine seg allocation

v2ray 9 vuotta sitten
vanhempi
commit
16d1b42f59

+ 1 - 0
transport/internet/kcp/kcp.go

@@ -215,6 +215,7 @@ func (kcp *KCP) flush() {
 		kcp.output.Write(seg)
 		kcp.lastPingTime = kcp.current
 		kcp.sendingUpdated = false
+		seg.Release()
 	}
 
 	// flash remain segments

+ 1 - 1
transport/internet/kcp/output.go

@@ -39,7 +39,7 @@ func (this *BufferedSegmentWriter) Write(seg Segment) {
 		this.buffer = alloc.NewSmallBuffer().Clear()
 	}
 
-	this.buffer.Append(seg.Bytes(nil))
+	this.buffer.Value = seg.Bytes(this.buffer.Value)
 }
 
 func (this *BufferedSegmentWriter) FlushWithoutLock() {

+ 5 - 3
transport/internet/kcp/receiving.go

@@ -112,6 +112,9 @@ L:
 				return totalBytes, errTimeout
 			}
 			timeToSleep += 500 * time.Millisecond
+			if timeToSleep > 5*time.Second {
+				timeToSleep = 5 * time.Second
+			}
 		}
 	}
 
@@ -119,9 +122,6 @@ L:
 }
 
 func (this *ReceivingQueue) Put(payload *alloc.Buffer) bool {
-	this.Lock()
-	defer this.Unlock()
-
 	if this.closed {
 		payload.Release()
 		return false
@@ -211,6 +211,7 @@ func (this *AckList) Flush(current uint32, rto uint32) {
 	this.Unlock()
 	if seg.Count > 0 {
 		this.writer.Write(seg)
+		seg.Release()
 	}
 }
 
@@ -268,6 +269,7 @@ func (this *ReceivingWorker) ProcessSegment(seg *DataSegment) {
 		}
 
 		seg.Data = nil
+		seg.Release()
 		this.window.Advance()
 		this.nextNumber++
 		this.updated = true

+ 0 - 3
transport/internet/kcp/segment.go

@@ -230,9 +230,6 @@ func ReadSegment(buf []byte) (Segment, []byte) {
 		seg.Count = buf[0]
 		buf = buf[1:]
 
-		seg.NumberList = make([]uint32, 0, seg.Count)
-		seg.TimestampList = make([]uint32, 0, seg.Count)
-
 		if len(buf) < int(seg.Count)*8 {
 			return nil, nil
 		}