From a7820a5879c799f55755928575fe6106b5b216b5 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sat, 15 Jan 2022 18:58:17 +0400 Subject: [PATCH] hide watchdog behind cgo flag --- connmgr.go | 17 ++++++++--------- options.go | 8 -------- watchdog_cgo.go | 18 ++++++++++++++++++ watchdog_no_cgo.go | 16 ++++++++++++++++ 4 files changed, 42 insertions(+), 17 deletions(-) create mode 100644 watchdog_cgo.go create mode 100644 watchdog_no_cgo.go diff --git a/connmgr.go b/connmgr.go index a42c443..9ee5870 100644 --- a/connmgr.go +++ b/connmgr.go @@ -13,7 +13,6 @@ import ( logging "github.com/ipfs/go-log/v2" ma "github.com/multiformats/go-multiaddr" - "github.com/raulk/go-watchdog" ) var log = logging.Logger("connmgr") @@ -44,10 +43,10 @@ type BasicConnMgr struct { lastTrimMu sync.RWMutex lastTrim time.Time - refCount sync.WaitGroup - ctx context.Context - cancel func() - unregisterWatchdog func() + refCount sync.WaitGroup + ctx context.Context + cancel func() + unregisterMemoryWatcher func() } var ( @@ -131,9 +130,7 @@ func NewConnManager(low, hi int, opts ...Option) (*BasicConnMgr, error) { if cfg.emergencyTrim { // When we're running low on memory, immediately trigger a trim. - cm.unregisterWatchdog = watchdog.RegisterPostGCNotifee(cm.memoryEmergency) - } else { - cm.unregisterWatchdog = func() {} + cm.unregisterMemoryWatcher = registerWatchdog(cm.memoryEmergency) } decay, _ := NewDecayer(cfg.decayer, cm) @@ -176,7 +173,9 @@ func (cm *BasicConnMgr) memoryEmergency() { func (cm *BasicConnMgr) Close() error { cm.cancel() - cm.unregisterWatchdog() + if cm.unregisterMemoryWatcher != nil { + cm.unregisterMemoryWatcher() + } if err := cm.decayer.Close(); err != nil { return err } diff --git a/options.go b/options.go index d66884c..76b4ef3 100644 --- a/options.go +++ b/options.go @@ -51,11 +51,3 @@ func WithSilencePeriod(p time.Duration) Option { return nil } } - -// WithEmergencyTrim is an option to enable trimming connections on memory emergency. -func WithEmergencyTrim(enable bool) Option { - return func(cfg *config) error { - cfg.emergencyTrim = enable - return nil - } -} diff --git a/watchdog_cgo.go b/watchdog_cgo.go new file mode 100644 index 0000000..b048111 --- /dev/null +++ b/watchdog_cgo.go @@ -0,0 +1,18 @@ +//go:build cgo +// +build cgo + +package connmgr + +import "github.com/raulk/go-watchdog" + +func registerWatchdog(cb func()) (unregister func()) { + return watchdog.RegisterPostGCNotifee(cb) +} + +// WithEmergencyTrim is an option to enable trimming connections on memory emergency. +func WithEmergencyTrim(enable bool) Option { + return func(cfg *config) error { + cfg.emergencyTrim = enable + return nil + } +} diff --git a/watchdog_no_cgo.go b/watchdog_no_cgo.go new file mode 100644 index 0000000..fb83c28 --- /dev/null +++ b/watchdog_no_cgo.go @@ -0,0 +1,16 @@ +//go:build !cgo +// +build !cgo + +package connmgr + +func registerWatchdog(func()) (unregister func()) { + return nil +} + +// WithEmergencyTrim is an option to enable trimming connections on memory emergency. +func WithEmergencyTrim(enable bool) Option { + return func(cfg *config) error { + log.Warn("platform doesn't support go-watchdog") + return nil + } +}