]> Sergey Matveev's repositories - vors.git/blobdiff - cmd/server/room.go
Use mutexes over iterable maps for reliability
[vors.git] / cmd / server / room.go
index 0be24b25d24697e39460d00b3b604f4b11820a72f13202bf289f7552704d8024..1d924fc308ede370df69b646541c9e0e2016a14259f19eb864bf70d4bbbbeb27 100644 (file)
@@ -12,21 +12,24 @@ import (
 
 var (
        Rooms  = map[string]*Room{}
-       RoomsM sync.Mutex
+       RoomsM sync.RWMutex
 )
 
 type Room struct {
-       name  string
-       key   string
-       peers map[byte]*Peer
-       alive chan struct{}
+       name   string
+       key    string
+       peers  map[byte]*Peer
+       peersM sync.RWMutex
+       alive  chan struct{}
 }
 
 func (room *Room) Stats(now time.Time) []string {
        sids := make([]int, 0, len(room.peers))
+       room.peersM.RLock()
        for sid := range room.peers {
                sids = append(sids, int(sid))
        }
+       room.peersM.RUnlock()
        sort.Ints(sids)
        lines := make([]string, 0, len(sids))
        for _, sid := range sids {