fix(enterprise/coderd): prevent deadlock during entitlements update (#8215)

This commit is contained in:
Mathias Fredriksson
2023-06-26 20:22:28 +03:00
committed by GitHub
parent 56395410bd
commit 31076ad665
2 changed files with 9 additions and 6 deletions

View File

@ -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)