[tor-commits] [flashproxy/master] Handle SIGTERM in websocket-server.

dcf at torproject.org dcf at torproject.org
Fri Sep 20 07:41:46 UTC 2013


commit fc5a863f5cb44b28d76e1c386520a4913d9caa3b
Author: David Fifield <david at bamsoftware.com>
Date:   Fri Sep 13 15:56:53 2013 -0700

    Handle SIGTERM in websocket-server.
---
 .../src/websocket-server/websocket-server.go       |   33 ++++++++++++--------
 1 file changed, 20 insertions(+), 13 deletions(-)

diff --git a/websocket-transport/src/websocket-server/websocket-server.go b/websocket-transport/src/websocket-server/websocket-server.go
index b280862..207be8d 100644
--- a/websocket-transport/src/websocket-server/websocket-server.go
+++ b/websocket-transport/src/websocket-server/websocket-server.go
@@ -16,6 +16,7 @@ import (
 	"os"
 	"os/signal"
 	"sync"
+	"syscall"
 	"time"
 )
 
@@ -247,32 +248,38 @@ func main() {
 	pt.SmethodsDone()
 
 	var numHandlers int = 0
+	var sig os.Signal
+	sigChan := make(chan os.Signal, 1)
+	signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
 
-	signalChan := make(chan os.Signal, 1)
-	signal.Notify(signalChan, os.Interrupt)
-	var sigint bool = false
-	for !sigint {
+	sig = nil
+	for sig == nil {
 		select {
 		case n := <-handlerChan:
 			numHandlers += n
-		case <-signalChan:
-			log("SIGINT")
-			sigint = true
+		case sig = <-sigChan:
 		}
 	}
-
+	log("Got first signal %q with %d running handlers.", sig, numHandlers)
 	for _, ln := range listeners {
 		ln.Close()
 	}
 
-	sigint = false
-	for numHandlers != 0 && !sigint {
+	if sig == syscall.SIGTERM {
+		log("Caught signal %q, exiting.", sig)
+		return
+	}
+
+	sig = nil
+	for sig == nil && numHandlers != 0 {
 		select {
 		case n := <-handlerChan:
 			numHandlers += n
-		case <-signalChan:
-			log("SIGINT")
-			sigint = true
+			log("%d remaining handlers.", numHandlers)
+		case sig = <-sigChan:
 		}
 	}
+	if sig != nil {
+		log("Got second signal %q with %d running handlers.", sig, numHandlers)
+	}
 }





More information about the tor-commits mailing list