TUN-1510: Wrap the close() in sync.Once.Do

This commit is contained in:
Adam Chalmers
2019-02-19 11:40:49 -06:00
parent e025a4cd7b
commit 7475e3e487
2 changed files with 7 additions and 5 deletions

View File

@@ -181,6 +181,7 @@ func StartServer(c *cli.Context, version string, shutdownC, graceShutdownC chan
listeners := gracenet.Net{}
errC := make(chan error)
connectedSignal := make(chan struct{})
closeConnOnce := sync.Once{}
dnsReadySignal := make(chan struct{})
if c.String("config") == "" {
@@ -280,7 +281,7 @@ func StartServer(c *cli.Context, version string, shutdownC, graceShutdownC chan
// Serve DNS proxy stand-alone if no hostname or tag or app is going to run
if dnsProxyStandAlone(c) {
close(connectedSignal)
closeConnOnce.Do(func() { close(connectedSignal) })
// no grace period, handle SIGINT/SIGTERM immediately
return waitToShutdown(&wg, errC, shutdownC, graceShutdownC, 0)
}
@@ -315,6 +316,7 @@ func StartServer(c *cli.Context, version string, shutdownC, graceShutdownC chan
}
tunnelConfig, err := prepareTunnelConfig(c, buildInfo, version, logger, transportLogger)
tunnelConfig.CloseConnOnce = &closeConnOnce
if err != nil {
return err
}