diff --git a/adapter/outboundgroup/fallback.go b/adapter/outboundgroup/fallback.go index 1d109a644e..d1fc9bf0e6 100644 --- a/adapter/outboundgroup/fallback.go +++ b/adapter/outboundgroup/fallback.go @@ -93,9 +93,12 @@ func (f *Fallback) Unwrap(metadata *C.Metadata, touch bool) C.Proxy { } func (f *Fallback) proxies(touch bool) []C.Proxy { - elm, _, _ := f.single.Do(func() ([]C.Proxy, error) { + elm, _, shared := f.single.Do(func() ([]C.Proxy, error) { return getProvidersProxies(f.providers, touch, f.filter), nil }) + if shared && touch { // a shared fastSingle.Do() may cause providers untouched, so we touch them again + touchProviders(f.providers) + } return elm } diff --git a/adapter/outboundgroup/loadbalance.go b/adapter/outboundgroup/loadbalance.go index 006e8e7541..2ac72ce9f1 100644 --- a/adapter/outboundgroup/loadbalance.go +++ b/adapter/outboundgroup/loadbalance.go @@ -188,9 +188,12 @@ func (lb *LoadBalance) Unwrap(metadata *C.Metadata, touch bool) C.Proxy { } func (lb *LoadBalance) proxies(touch bool) []C.Proxy { - elm, _, _ := lb.single.Do(func() ([]C.Proxy, error) { + elm, _, shared := lb.single.Do(func() ([]C.Proxy, error) { return getProvidersProxies(lb.providers, touch, lb.filter), nil }) + if shared && touch { // a shared fastSingle.Do() may cause providers untouched, so we touch them again + touchProviders(lb.providers) + } return elm }