From 81009c1a812a4c1abe957fcdf962a7e28acf37fa Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 23 Jan 2026 20:27:22 -0800 Subject: [PATCH] Refactor IAM Storage: Multi-File Backend & Unified Interface (#8102) Refactor IAM Shutdown to use sync.Once for thread safety --- weed/s3api/auth_credentials.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/weed/s3api/auth_credentials.go b/weed/s3api/auth_credentials.go index 2d28b94c5..b3c060e17 100644 --- a/weed/s3api/auth_credentials.go +++ b/weed/s3api/auth_credentials.go @@ -62,7 +62,8 @@ type IdentityAccessManagement struct { policyEngine *BucketPolicyEngine // background polling - stopChan chan struct{} + stopChan chan struct{} + shutdownOnce sync.Once // useStaticConfig indicates if the configuration was loaded from a static file useStaticConfig bool @@ -251,12 +252,14 @@ func (iam *IdentityAccessManagement) pollIamConfigChanges(interval time.Duration } func (iam *IdentityAccessManagement) Shutdown() { - if iam.stopChan != nil { - close(iam.stopChan) - } - if iam.credentialManager != nil { - iam.credentialManager.Shutdown() - } + iam.shutdownOnce.Do(func() { + if iam.stopChan != nil { + close(iam.stopChan) + } + if iam.credentialManager != nil { + iam.credentialManager.Shutdown() + } + }) } // loadEnvironmentVariableCredentials loads AWS credentials from environment variables