fix: 修复 server 包 RegMessageExecBeforeEvent 函数导致内存泄露的问题

This commit is contained in:
kercylan98 2023-09-05 10:57:44 +08:00
parent 0297c4444a
commit 15a491816a
2 changed files with 4 additions and 8 deletions

View File

@ -4,11 +4,9 @@ import (
"context" "context"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/kercylan98/minotaur/utils/concurrent" "github.com/kercylan98/minotaur/utils/concurrent"
"github.com/kercylan98/minotaur/utils/log"
"github.com/panjf2000/gnet" "github.com/panjf2000/gnet"
"github.com/xtaci/kcp-go/v5" "github.com/xtaci/kcp-go/v5"
"net" "net"
"runtime/debug"
"strings" "strings"
"sync" "sync"
) )
@ -278,8 +276,9 @@ func (slf *Conn) writeLoop(wait *sync.WaitGroup) {
defer func() { defer func() {
if err := recover(); err != nil { if err := recover(); err != nil {
slf.Close() slf.Close()
log.Error("WriteLoop", log.Any("Error", err)) // TODO: 以下代码是否需要?
debug.PrintStack() // log.Error("WriteLoop", log.Any("Error", err))
// debug.PrintStack()
} }
}() }()
wait.Done() wait.Done()

View File

@ -551,13 +551,10 @@ func (slf *Server) ShuntChannelFreed(channelGuid int64) {
// pushMessage 向服务器中写入特定类型的消息,需严格遵守消息属性要求 // pushMessage 向服务器中写入特定类型的消息,需严格遵守消息属性要求
func (slf *Server) pushMessage(message *Message) { func (slf *Server) pushMessage(message *Message) {
if slf.messagePool.IsClose() { if slf.messagePool.IsClose() || slf.isShutdown.Load() || !slf.OnMessageExecBeforeEvent(message) {
slf.messagePool.Release(message) slf.messagePool.Release(message)
return return
} }
if slf.isShutdown.Load() || !slf.OnMessageExecBeforeEvent(message) {
return
}
if slf.shuntChannels != nil && message.t == MessageTypePacket { if slf.shuntChannels != nil && message.t == MessageTypePacket {
conn := message.attrs[0].(*Conn) conn := message.attrs[0].(*Conn)
channelGuid, allowToCreate := slf.shuntMatcher(conn) channelGuid, allowToCreate := slf.shuntMatcher(conn)