summaryrefslogtreecommitdiff
path: root/caddy.go
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2019-04-02 15:31:02 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2019-04-02 15:31:02 -0600
commit59a5d0db28e36b9732bc9ad2b73bcde9188e207c (patch)
treea003061dd272d1cc216318c9cf295a771de63df4 /caddy.go
parentf976aa744385b097239a7323af4dec11f83bc949 (diff)
Close listeners which are no longer used
Diffstat (limited to 'caddy.go')
-rw-r--r--caddy.go17
1 files changed, 17 insertions, 0 deletions
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
}