mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 13:37:30 +00:00
Add lock semantics around dev_mode.IsEnabled to avoid data races (#42646)
Add lock semantics around dev_mode.IsEnabled to as a fix for [this](https://github.com/fleetdm/fleet/actions/runs/23728512273) data race
This commit is contained in:
parent
c75e5d85c0
commit
85c8d050d0
1 changed files with 25 additions and 2 deletions
|
|
@ -2,19 +2,32 @@ package dev_mode
|
|||
|
||||
import (
|
||||
"os"
|
||||
"sync"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// IsEnabled should be configured once at process startup (e.g., via flags) and then treated as read-only.
|
||||
// It must not be written from concurrent goroutines; SetOverride only affects enabledViaOverride/env overrides.
|
||||
var IsEnabled bool
|
||||
|
||||
// enabledViaOverride is set by SetOverride and protected by mu so that it is
|
||||
// always observed consistently with envOverrides.
|
||||
var enabledViaOverride bool
|
||||
|
||||
var mu sync.RWMutex
|
||||
|
||||
var envOverrides = map[string]string{}
|
||||
|
||||
type GetEnv func(name string) string
|
||||
|
||||
func Env(name string) string {
|
||||
if !IsEnabled {
|
||||
mu.RLock()
|
||||
defer mu.RUnlock()
|
||||
|
||||
if !IsEnabled && !enabledViaOverride {
|
||||
return ""
|
||||
}
|
||||
|
||||
if override, ok := envOverrides[name]; ok {
|
||||
return override
|
||||
}
|
||||
|
|
@ -30,14 +43,24 @@ func SetOverride(name string, value string, cleanup ...*testing.T) { // optional
|
|||
})
|
||||
}
|
||||
|
||||
IsEnabled = true // if we're setting overrides, we're in a test environment so want to turn dev mode on
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
enabledViaOverride = true // if we're setting overrides, we're in a test environment so want to turn dev mode on
|
||||
envOverrides[name] = value
|
||||
}
|
||||
|
||||
func ClearOverride(name string) {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
delete(envOverrides, name)
|
||||
}
|
||||
|
||||
func ClearAllOverrides() {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
enabledViaOverride = false
|
||||
envOverrides = map[string]string{}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue