From 6bf080393d88534aa658ecaff32ae089bd304772 Mon Sep 17 00:00:00 2001 From: Corey Hulen Date: Tue, 4 Apr 2017 11:42:07 -0700 Subject: Fixing race conditions in the code base (#5966) * Adding initial race detector * Remove setting of config twice * Fixing config file watch and config reload on license save * Fixing config file watch and config reload on license save * Fixing build error * Fixing locking issue * Fixing makefile * Fixing race in config * Fixing race in status unit test * Adding EE race tests * Fixing race in cluster info * Removing code that's isn't needed * Fixing some more races * Fixing govet issue --- app/web_hub.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'app/web_hub.go') diff --git a/app/web_hub.go b/app/web_hub.go index a0663459a..f65683f70 100644 --- a/app/web_hub.go +++ b/app/web_hub.go @@ -8,6 +8,7 @@ import ( "hash/fnv" "runtime" "runtime/debug" + "sync/atomic" l4g "github.com/alecthomas/log4go" @@ -18,6 +19,7 @@ import ( type Hub struct { connections []*WebConn + count int64 register chan *WebConn unregister chan *WebConn broadcast chan *model.WebSocketEvent @@ -43,12 +45,12 @@ func NewWebHub() *Hub { func TotalWebsocketConnections() int { // This is racy, but it's only used for reporting information // so it's probably OK - count := 0 + count := int64(0) for _, hub := range hubs { - count = count + len(hub.connections) + count = count + atomic.LoadInt64(&hub.count) } - return count + return int(count) } func HubStart() { @@ -248,6 +250,7 @@ func (h *Hub) Start() { select { case webCon := <-h.register: h.connections = append(h.connections, webCon) + atomic.StoreInt64(&h.count, int64(len(h.connections))) case webCon := <-h.unregister: userId := webCon.UserId -- cgit v1.2.3-1-g7c22