From 1ca4679b0454e715479b91a71ef9ce9511a32a7d Mon Sep 17 00:00:00 2001 From: Stephen McQuay Date: Thu, 5 Sep 2013 18:14:41 -0700 Subject: [PATCH] embedded the mutex into the games global (one fewer global) --- game.go | 6 +++--- http.go | 18 +++++++++--------- main.go | 11 ++++++++--- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/game.go b/game.go index 0d2f434..00efb70 100644 --- a/game.go +++ b/game.go @@ -47,9 +47,9 @@ func (g *game) run() { select { case <-g.kill: log.Printf("game %s: received kill signal, dying gracefully", g.id) - gameLock.Lock() - delete(games, g.id) - gameLock.Unlock() + games.Lock() + delete(games.m, g.id) + games.Unlock() return case p := <-g.register: g.players[p] = true diff --git a/http.go b/http.go index f12278d..afc11ce 100644 --- a/http.go +++ b/http.go @@ -22,19 +22,19 @@ func startGame(w http.ResponseWriter, req *http.Request) { _g := NewGame(new_game_name, *width, *height) go _g.run() - gameLock.Lock() - games[new_game_name] = _g + games.Lock() + games.m[new_game_name] = _g log.Printf("%+v", games) - gameLock.Unlock() + games.Unlock() w.Write([]byte(fmt.Sprintf(`{"id": "%s"}`, new_game_name))) } func listGames(w http.ResponseWriter, req *http.Request) { - gameLock.RLock() - defer gameLock.RUnlock() + games.RLock() + defer games.RUnlock() ids := make([]string, 0) - for id, _ := range games { + for id, _ := range games.m { ids = append(ids, id) } if err := json.NewEncoder(w).Encode(ids); err != nil { @@ -51,9 +51,9 @@ func addPlayer(ws *websocket.Conn) { return } - gameLock.Lock() - game, ok := games[gid.Id] - gameLock.Unlock() + games.Lock() + game, ok := games.m[gid.Id] + games.Unlock() if !ok { log.Println("ERROR: game not found") diff --git a/main.go b/main.go index c5721c4..58bb4a4 100644 --- a/main.go +++ b/main.go @@ -18,15 +18,20 @@ var height = flag.Float64("height", 550, "height of field") var delta float64 -var games map[string]*game var idg *IdGenerator -var gameLock sync.RWMutex + +type MapLock struct { + m map[string]*game + sync.RWMutex +} + +var games MapLock func main() { rand.Seed(time.Now().UnixNano()) flag.Parse() - games = make(map[string]*game) + games = MapLock{m: make(map[string]*game)} idg = NewIdGenerator() delta = float64(*tick) / 1000