From 59a5d0db28e36b9732bc9ad2b73bcde9188e207c Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Tue, 2 Apr 2019 15:31:02 -0600 Subject: Close listeners which are no longer used --- caddy.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'caddy.go') diff --git a/caddy.go b/caddy.go index b4af632..b9d7022 100644 --- a/caddy.go +++ b/caddy.go @@ -6,6 +6,7 @@ import ( "log" "strings" "sync" + "sync/atomic" "time" ) @@ -24,6 +25,7 @@ func Start(cfg Config) error { cfg.runners[modName] = val.(Runner) } + // start the new runners for name, r := range cfg.runners { err := r.Run() if err != nil { @@ -32,6 +34,7 @@ func Start(cfg Config) error { } } + // shut down down the old ones currentCfgMu.Lock() if currentCfg != nil { for _, r := range currentCfg.runners { @@ -44,6 +47,20 @@ func Start(cfg Config) error { currentCfg = &cfg currentCfgMu.Unlock() + // shut down listeners that are no longer being used + listenersMu.Lock() + for key, info := range listeners { + if atomic.LoadInt32(&info.usage) == 0 { + err := info.ln.Close() + if err != nil { + log.Printf("[ERROR] closing listener %s: %v", info.ln.Addr(), err) + continue + } + delete(listeners, key) + } + } + listenersMu.Unlock() + return nil } -- cgit v1.2.3