diff --git a/adapter/provider/provider.go b/adapter/provider/provider.go index 71713d8f..6ee4fbb1 100644 --- a/adapter/provider/provider.go +++ b/adapter/provider/provider.go @@ -8,6 +8,7 @@ import ( "reflect" "runtime" "strings" + "sync" "time" "github.com/metacubex/mihomo/adapter" @@ -43,6 +44,7 @@ type providerForApi struct { } type baseProvider struct { + mutex sync.RWMutex name string proxies []C.Proxy healthCheck *HealthCheck @@ -54,6 +56,8 @@ func (bp *baseProvider) Name() string { } func (bp *baseProvider) Version() uint32 { + bp.mutex.RLock() + defer bp.mutex.RUnlock() return bp.version } @@ -73,10 +77,14 @@ func (bp *baseProvider) Type() P.ProviderType { } func (bp *baseProvider) Proxies() []C.Proxy { + bp.mutex.RLock() + defer bp.mutex.RUnlock() return bp.proxies } func (bp *baseProvider) Count() int { + bp.mutex.RLock() + defer bp.mutex.RUnlock() return len(bp.proxies) } @@ -93,6 +101,8 @@ func (bp *baseProvider) RegisterHealthCheckTask(url string, expectedStatus utils } func (bp *baseProvider) setProxies(proxies []C.Proxy) { + bp.mutex.Lock() + defer bp.mutex.Unlock() bp.proxies = proxies bp.version += 1 bp.healthCheck.setProxies(proxies)