From 4fb8a1cdb7136793347880af1b8e47be6ca232ba Mon Sep 17 00:00:00 2001 From: Martin Atkins Date: Wed, 15 Nov 2023 12:29:11 -0800 Subject: [PATCH] terraform: Fix data race in MockProvider.ApplyResourceChange The p.ConfigureProviderCalled read needs to be guarded by the mutex so that it can't race with the write to that field in the ConfigureProvider method. This remains as a pair of explicit calls to Unlock rather than as a single deferred call because existing tests might be relying on their ApplyResourceChangeFn being called without the mutex locked. This isn't necessarily required, but I'm being conservative to reduce the risk of unexpectedly making subtle changes to the behavior of existing tests. --- internal/terraform/provider_mock.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/terraform/provider_mock.go b/internal/terraform/provider_mock.go index e3e8cb2e53..3ec4c740cf 100644 --- a/internal/terraform/provider_mock.go +++ b/internal/terraform/provider_mock.go @@ -397,12 +397,13 @@ func (p *MockProvider) ApplyResourceChange(r providers.ApplyResourceChangeReques p.Lock() p.ApplyResourceChangeCalled = true p.ApplyResourceChangeRequest = r - p.Unlock() if !p.ConfigureProviderCalled { + p.Unlock() resp.Diagnostics = resp.Diagnostics.Append(fmt.Errorf("Configure not called before ApplyResourceChange %q", r.TypeName)) return resp } + p.Unlock() if p.ApplyResourceChangeFn != nil { return p.ApplyResourceChangeFn(r)