X-Git-Url: https://code.octet-stream.net/broadcaster/blobdiff_plain/c94fef11f43279165f39680fa0b0922c86702687..8f9b19f7877e32c15a5f4c296d6738f449dfcc19:/server/status.go diff --git a/server/status.go b/server/status.go index accbcc9..260a0ce 100644 --- a/server/status.go +++ b/server/status.go @@ -2,11 +2,13 @@ package main import ( "code.octet-stream.net/broadcaster/protocol" + "sync" ) type ServerStatus struct { - statuses map[int]protocol.StatusMessage - changeWait chan bool + statuses map[int]protocol.StatusMessage + statusesMutex sync.Mutex + changeWait chan bool } var status ServerStatus @@ -19,11 +21,15 @@ func InitServerStatus() { } func (s *ServerStatus) MergeStatus(radioId int, status protocol.StatusMessage) { + s.statusesMutex.Lock() + defer s.statusesMutex.Unlock() s.statuses[radioId] = status s.TriggerChange() } func (s *ServerStatus) RadioDisconnected(radioId int) { + s.statusesMutex.Lock() + defer s.statusesMutex.Unlock() delete(s.statuses, radioId) s.TriggerChange() } @@ -34,7 +40,13 @@ func (s *ServerStatus) TriggerChange() { } func (s *ServerStatus) Statuses() map[int]protocol.StatusMessage { - return s.statuses + s.statusesMutex.Lock() + defer s.statusesMutex.Unlock() + c := make(map[int]protocol.StatusMessage) + for k, v := range s.statuses { + c[k] = v + } + return c } func (s *ServerStatus) ChangeChannel() chan bool {