From 3ad5d7eea292056002a8d8f68b36d41d3b42e65f Mon Sep 17 00:00:00 2001 From: wish Date: Sat, 12 Nov 2022 02:50:32 +1100 Subject: [PATCH] fix issue where broadcasts can go to unmapped sessions --- server/channelserver/handlers_stage.go | 2 -- server/channelserver/sys_stage.go | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/channelserver/handlers_stage.go b/server/channelserver/handlers_stage.go index 90ecdec99..07ab06394 100644 --- a/server/channelserver/handlers_stage.go +++ b/server/channelserver/handlers_stage.go @@ -135,7 +135,6 @@ func destructEmptyStages(s *Session) { func removeSessionFromStage(s *Session) { // Remove client from old stage. - s.stage.Lock() delete(s.stage.clients, s) // Delete old stage objects owned by the client. @@ -146,7 +145,6 @@ func removeSessionFromStage(s *Session) { delete(s.stage.objects, object.ownerCharID) } } - s.stage.Unlock() destructEmptyStages(s) destructEmptySemaphores(s) } diff --git a/server/channelserver/sys_stage.go b/server/channelserver/sys_stage.go index 4cd96a7f8..2c5cb5d23 100644 --- a/server/channelserver/sys_stage.go +++ b/server/channelserver/sys_stage.go @@ -69,6 +69,8 @@ func NewStage(ID string) *Stage { // BroadcastMHF queues a MHFPacket to be sent to all sessions in the stage. func (s *Stage) BroadcastMHF(pkt mhfpacket.MHFPacket, ignoredSession *Session) { + s.Lock() + defer s.Unlock() // Broadcast the data. for session := range s.clients { if session == ignoredSession {