diff --git a/pkg/api/webassets/webassets.go b/pkg/api/webassets/webassets.go index 197c5f76281..dc26b5761e6 100644 --- a/pkg/api/webassets/webassets.go +++ b/pkg/api/webassets/webassets.go @@ -8,6 +8,7 @@ import ( "net/http" "os" "path/filepath" + "sync" "github.com/grafana/grafana/pkg/api/dtos" "github.com/grafana/grafana/pkg/services/licensing" @@ -31,12 +32,21 @@ type EntryPointInfo struct { } `json:"assets,omitempty"` } -var entryPointAssetsCache *dtos.EntryPointAssets = nil +var ( + entryPointAssetsCacheMu sync.RWMutex // guard entryPointAssetsCache + entryPointAssetsCache *dtos.EntryPointAssets // TODO: get rid of global state +) func GetWebAssets(ctx context.Context, cfg *setting.Cfg, license licensing.Licensing) (*dtos.EntryPointAssets, error) { - if cfg.Env != setting.Dev && entryPointAssetsCache != nil { - return entryPointAssetsCache, nil + entryPointAssetsCacheMu.RLock() + ret := entryPointAssetsCache + entryPointAssetsCacheMu.RUnlock() + + if cfg.Env != setting.Dev && ret != nil { + return ret, nil } + entryPointAssetsCacheMu.Lock() + defer entryPointAssetsCacheMu.Unlock() var err error var result *dtos.EntryPointAssets