diff --git a/src/server/game/external.go b/src/server/game/external.go index d43b7dae..de31aa75 100644 --- a/src/server/game/external.go +++ b/src/server/game/external.go @@ -215,6 +215,7 @@ func HandleClientReq(args []interface{}) { } p.(*Player).Recover(backup) //还原Player的数据 } + backup.Reclaim() // 回收备份对象 p.(*Player).lock.Unlock() //解锁 }() p.(*Player).args = make(map[string]interface{}) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 9e340ff4..9b5fa356 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -38,7 +38,8 @@ func (p *Player) HandleMsg(m *msg.Msg) { log.Error("Handle msg uid : %d, msg : %v, fatal : %s", p.M_DwUin, m, r) p.Recover(backup) //还原Player的数据 } - p.lock.Unlock() //解锁 + backup.Reclaim() // 回收备份对象 + p.lock.Unlock() //解锁 }() p.args = make(map[string]interface{}) err := p.handle(m) diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 065517f7..430a9fd9 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -93,6 +93,11 @@ func (pd *PlayerBackUp) Reset() { pd.PlayMod = nil } +func (pd *PlayerBackUp) Reclaim() { + pd.Reset() + playerDataPool.Put(pd) +} + func (p *Player) Stop() { p.wg.Wait() p.signalDispatcherStop() @@ -223,8 +228,6 @@ func (p *Player) Recover(backUp *PlayerBackUp) { // p.GetPlayerBaseMod().Data = backUp.Data p.PlayMod.Recover(backUp) p.Msg = make([]PlayerMsg, 0) - backUp.Reset() - playerDataPool.Put(backUp) } func (p *Player) InitPlayer(UserName string) error {