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
Этот коммит содержится в:
коммит произвёл
Harrison Healey
родитель
32460bf63b
Коммит
6bf080393d
@@ -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
|
||||
|
||||
Ссылка в новой задаче
Block a user