@@ -35,9 +35,12 @@ type entraidCredentialsProvider struct {
3535// It notifies all registered listeners with the new token.
3636func (e * entraidCredentialsProvider ) onTokenNext (t * token.Token ) {
3737 e .rwLock .RLock ()
38- defer e .rwLock .RUnlock ()
38+ // Make a deep copy of the listeners slice to avoid data race
39+ listeners := make ([]auth.CredentialsListener , len (e .listeners ))
40+ copy (listeners , e .listeners )
41+ e .rwLock .RUnlock ()
3942 // Notify all listeners with the new token.
40- for _ , listener := range e . listeners {
43+ for _ , listener := range listeners {
4144 listener .OnNext (t )
4245 }
4346}
@@ -46,10 +49,13 @@ func (e *entraidCredentialsProvider) onTokenNext(t *token.Token) {
4649// It notifies all registered listeners with the error.
4750func (e * entraidCredentialsProvider ) onTokenError (err error ) {
4851 e .rwLock .RLock ()
49- defer e .rwLock .RUnlock ()
52+ // Make a deep copy of the listeners slice to avoid data race
53+ listeners := make ([]auth.CredentialsListener , len (e .listeners ))
54+ copy (listeners , e .listeners )
55+ e .rwLock .RUnlock ()
5056
5157 // Notify all listeners with the error
52- for _ , listener := range e . listeners {
58+ for _ , listener := range listeners {
5359 listener .OnError (err )
5460 }
5561}
0 commit comments