commit 502001aed9e40f79807b913b02ea82f7c381e47d Author: David Fifield david@bamsoftware.com Date: Tue Mar 20 23:24:10 2018 -0700
Update server shutdown procedure.
Ignore SIGINT, honor TOR_PT_EXIT_ON_STDIN_CLOSE. --- meek-server/meek-server.go | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-)
diff --git a/meek-server/meek-server.go b/meek-server/meek-server.go index 79dd80c..fe4c263 100644 --- a/meek-server/meek-server.go +++ b/meek-server/meek-server.go @@ -24,6 +24,7 @@ import ( "flag" "fmt" "io" + "io/ioutil" "log" "net" "net/http" @@ -496,9 +497,19 @@ func main() { var numHandlers int = 0 var sig os.Signal sigChan := make(chan os.Signal, 1) - signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) + signal.Notify(sigChan, syscall.SIGTERM) + + if os.Getenv("TOR_PT_EXIT_ON_STDIN_CLOSE") == "1" { + // This environment variable means we should treat EOF on stdin + // just like SIGTERM: https://bugs.torproject.org/15435. + go func() { + io.Copy(ioutil.Discard, os.Stdin) + log.Printf("synthesizing SIGTERM because of stdin close") + sigChan <- syscall.SIGTERM + }() + }
- // Wait for first signal. + // Keep track of handlers and wait for a signal. sig = nil for sig == nil { select { @@ -508,27 +519,15 @@ func main() { log.Printf("got signal %s", sig) } } + /* // Not supported until go1.8. for _, server := range servers { server.Close() } */ - - if sig == syscall.SIGTERM { - log.Printf("done") - return - } - - // Wait for second signal or no more handlers. - sig = nil - for sig == nil && numHandlers != 0 { - select { - case n := <-handlerChan: - numHandlers += n - case sig = <-sigChan: - log.Printf("got second signal %s", sig) - } + for numHandlers > 0 { + numHandlers += <-handlerChan }
log.Printf("done")
tor-commits@lists.torproject.org