Pārlūkot izejas kodu

release memory in kcp connection

Darien Raymond 9 gadi atpakaļ
vecāks
revīzija
15cb543abb

+ 2 - 0
transport/internet/kcp/connection.go

@@ -467,6 +467,8 @@ func (this *Connection) Terminate() {
 	this.dataInputCond.Broadcast()
 	this.dataOutputCond.Broadcast()
 	this.writer.Close()
+	this.sendingWorker.Release()
+	this.receivingWorker.Release()
 }
 
 func (this *Connection) HandleOption(opt SegmentOption) {

+ 4 - 0
transport/internet/kcp/receiving.go

@@ -137,6 +137,10 @@ func NewReceivingWorker(kcp *Connection) *ReceivingWorker {
 	return worker
 }
 
+func (this *ReceivingWorker) Release() {
+	this.leftOver.Release()
+}
+
 func (this *ReceivingWorker) ProcessSendingNext(number uint32) {
 	this.Lock()
 	defer this.Unlock()

+ 13 - 0
transport/internet/kcp/sending.go

@@ -36,6 +36,15 @@ func NewSendingWindow(size uint32, writer SegmentWriter, onPacketLoss func(uint3
 	return window
 }
 
+func (this *SendingWindow) Release() {
+	if this == nil {
+		return
+	}
+	for _, seg := range this.data {
+		seg.Release()
+	}
+}
+
 func (this *SendingWindow) Len() int {
 	return int(this.len)
 }
@@ -192,6 +201,10 @@ func NewSendingWorker(kcp *Connection) *SendingWorker {
 	return worker
 }
 
+func (this *SendingWorker) Release() {
+	this.window.Release()
+}
+
 func (this *SendingWorker) ProcessReceivingNext(nextNumber uint32) {
 	this.Lock()
 	defer this.Unlock()