Fix data races

This commit is contained in:
Philipp Heckel 2021-12-07 16:03:01 -05:00
parent c9f1b02251
commit 802ef17cb4
2 changed files with 8 additions and 1 deletions

View file

@ -386,8 +386,11 @@ func (s *Server) handleSubscribe(w http.ResponseWriter, r *http.Request, v *visi
if err != nil {
return err
}
var wlock sync.Mutex
poll := r.URL.Query().Has("poll")
sub := func(msg *message) error {
wlock.Lock()
defer wlock.Unlock()
m, err := encoder(msg)
if err != nil {
return err

View file

@ -4,6 +4,7 @@ import (
"fmt"
"math/rand"
"os"
"sync"
"time"
)
@ -12,7 +13,8 @@ const (
)
var (
random = rand.New(rand.NewSource(time.Now().UnixNano()))
random = rand.New(rand.NewSource(time.Now().UnixNano()))
randomMutex = sync.Mutex{}
)
// FileExists checks if a file exists, and returns true if it does
@ -23,6 +25,8 @@ func FileExists(filename string) bool {
// RandomString returns a random string with a given length
func RandomString(length int) string {
randomMutex.Lock() // Who would have thought that random.Intn() is not thread-safe?!
defer randomMutex.Unlock()
b := make([]byte, length)
for i := range b {
b[i] = randomStringCharset[random.Intn(len(randomStringCharset))]