Simplify signal handling in WebSocket server.

pt-spec no longer talks about SIGINT.
This commit is contained in:
David Fifield 2017-01-18 19:24:02 -08:00
parent 57f72ab4ff
commit 2a9126a158

View file

@ -320,9 +320,9 @@ func main() {
var numHandlers int = 0 var numHandlers int = 0
var sig os.Signal var sig os.Signal
sigChan := make(chan os.Signal, 1) sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) signal.Notify(sigChan, syscall.SIGTERM)
// wait for first signal // keep track of handlers and wait for a signal
sig = nil sig = nil
for sig == nil { for sig == nil {
select { select {
@ -331,27 +331,16 @@ func main() {
case sig = <-sigChan: case sig = <-sigChan:
} }
} }
log.Printf("Got first signal %q with %d running handlers.", sig, numHandlers)
// signal received, shut down
log.Printf("Caught signal %q, exiting.", sig)
for _, ln := range listeners { for _, ln := range listeners {
ln.Close() ln.Close()
} }
for n := range handlerChan {
if sig == syscall.SIGTERM {
log.Printf("Caught signal %q, exiting.", sig)
return
}
// wait for second signal or no more handlers
sig = nil
for sig == nil && numHandlers != 0 {
select {
case n := <-handlerChan:
numHandlers += n numHandlers += n
log.Printf("%d remaining handlers.", numHandlers) if numHandlers == 0 {
case sig = <-sigChan: break
} }
} }
if sig != nil {
log.Printf("Got second signal %q with %d running handlers.", sig, numHandlers)
}
} }