diff --git a/enterprise/coderd/coderd.go b/enterprise/coderd/coderd.go index 6545e599202f3..4a03731c5b21a 100644 --- a/enterprise/coderd/coderd.go +++ b/enterprise/coderd/coderd.go @@ -313,8 +313,9 @@ type API struct { // ProxyHealth checks the reachability of all workspace proxies. ProxyHealth *proxyhealth.ProxyHealth - entitlementsMu sync.RWMutex - entitlements codersdk.Entitlements + entitlementsUpdateMu sync.Mutex + entitlementsMu sync.RWMutex + entitlements codersdk.Entitlements } func (api *API) Close() error { @@ -329,8 +330,8 @@ func (api *API) Close() error { } func (api *API) updateEntitlements(ctx context.Context) error { - api.entitlementsMu.Lock() - defer api.entitlementsMu.Unlock() + api.entitlementsUpdateMu.Lock() + defer api.entitlementsUpdateMu.Unlock() entitlements, err := license.Entitlements( ctx, api.Database, @@ -457,6 +458,8 @@ func (api *API) updateEntitlements(ctx context.Context) error { } } + api.entitlementsMu.Lock() + defer api.entitlementsMu.Unlock() api.entitlements = entitlements api.AGPL.SiteHandler.Entitlements.Store(&entitlements) diff --git a/enterprise/coderd/workspaceagents.go b/enterprise/coderd/workspaceagents.go index d5595e6570543..05590342aec5b 100644 --- a/enterprise/coderd/workspaceagents.go +++ b/enterprise/coderd/workspaceagents.go @@ -9,9 +9,9 @@ import ( ) func (api *API) shouldBlockNonBrowserConnections(rw http.ResponseWriter) bool { - api.entitlementsMu.Lock() + api.entitlementsMu.RLock() browserOnly := api.entitlements.Features[codersdk.FeatureBrowserOnly].Enabled - api.entitlementsMu.Unlock() + api.entitlementsMu.RUnlock() if browserOnly { httpapi.Write(context.Background(), rw, http.StatusConflict, codersdk.Response{ Message: "Non-browser connections are disabled for your deployment.",