mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-09-15 22:10:26 +00:00
https://github.com/XTLS/Xray-core/pull/6400#issuecomment-4880198100 https://github.com/XTLS/Xray-core/pull/6400#issuecomment-4916892425 https://github.com/XTLS/Xray-core/pull/6400#issuecomment-4929136670
41 lines
938 B
Go
41 lines
938 B
Go
package platform
|
|
|
|
import (
|
|
"errors"
|
|
"sync"
|
|
)
|
|
|
|
var envReloadRegistry = struct {
|
|
sync.RWMutex
|
|
handlers []func() error
|
|
}{}
|
|
|
|
// RegisterEnvReload registers an environment reload handler and runs it once
|
|
// immediately so package defaults keep the same behavior as init-time reads.
|
|
func RegisterEnvReload(handler func() error) {
|
|
if handler == nil {
|
|
return
|
|
}
|
|
envReloadRegistry.Lock()
|
|
envReloadRegistry.handlers = append(envReloadRegistry.handlers, handler)
|
|
envReloadRegistry.Unlock()
|
|
if err := handler(); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
// ReloadEnvSettings refreshes all registered environment-backed package state.
|
|
func ReloadEnvSettings() error {
|
|
envReloadRegistry.RLock()
|
|
handlers := append([]func() error{}, envReloadRegistry.handlers...)
|
|
envReloadRegistry.RUnlock()
|
|
|
|
var errs []error
|
|
for _, handler := range handlers {
|
|
if err := handler(); err != nil {
|
|
errs = append(errs, err)
|
|
}
|
|
}
|
|
return errors.Join(errs...)
|
|
}
|