diff options
author | Matthew Holt <mholt@users.noreply.github.com> | 2019-04-02 15:31:02 -0600 |
---|---|---|
committer | Matthew Holt <mholt@users.noreply.github.com> | 2019-04-02 15:31:02 -0600 |
commit | 59a5d0db28e36b9732bc9ad2b73bcde9188e207c (patch) | |
tree | a003061dd272d1cc216318c9cf295a771de63df4 /caddy.go | |
parent | f976aa744385b097239a7323af4dec11f83bc949 (diff) |
Close listeners which are no longer used
Diffstat (limited to 'caddy.go')
-rw-r--r-- | caddy.go | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -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 } |