[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [goptlib/master] Don't wait for handlers to finish after SIGTERM in examples.



commit 15f83653abbcced9003c96cc14edc5b2f82e0e0e
Author: David Fifield <david@xxxxxxxxxxxxxxx>
Date:   Wed Jan 16 22:45:46 2019 -0700

    Don't wait for handlers to finish after SIGTERM in examples.
    
    The requirement to wait until handlers are finished, as well as the
    complicated signal counting logic, was removed from pt-spec.txt in 2014.
    
    https://bugs.torproject.org/26389#comment:5
---
 examples/dummy-client/dummy-client.go | 25 ++-----------------------
 examples/dummy-server/dummy-server.go | 25 ++-----------------------
 2 files changed, 4 insertions(+), 46 deletions(-)

diff --git a/examples/dummy-client/dummy-client.go b/examples/dummy-client/dummy-client.go
index 4812a9b..b1a9647 100644
--- a/examples/dummy-client/dummy-client.go
+++ b/examples/dummy-client/dummy-client.go
@@ -24,10 +24,6 @@ import "git.torproject.org/pluggable-transports/goptlib.git"
 
 var ptInfo pt.ClientInfo
 
-// When a connection handler starts, +1 is written to this channel; when it
-// ends, -1 is written.
-var handlerChan = make(chan int)
-
 func copyLoop(a, b net.Conn) {
 	var wg sync.WaitGroup
 	wg.Add(2)
@@ -45,11 +41,6 @@ func copyLoop(a, b net.Conn) {
 }
 
 func handler(conn *pt.SocksConn) error {
-	handlerChan <- 1
-	defer func() {
-		handlerChan <- -1
-	}()
-
 	defer conn.Close()
 	remote, err := net.Dial("tcp", conn.Req.Target)
 	if err != nil {
@@ -112,8 +103,6 @@ func main() {
 	}
 	pt.CmethodsDone()
 
-	var numHandlers int = 0
-	var sig os.Signal
 	sigChan := make(chan os.Signal, 1)
 	signal.Notify(sigChan, syscall.SIGTERM)
 
@@ -126,21 +115,11 @@ func main() {
 		}()
 	}
 
-	// keep track of handlers and wait for a signal
-	sig = nil
-	for sig == nil {
-		select {
-		case n := <-handlerChan:
-			numHandlers += n
-		case sig = <-sigChan:
-		}
-	}
+	// wait for a signal
+	<-sigChan
 
 	// signal received, shut down
 	for _, ln := range listeners {
 		ln.Close()
 	}
-	for numHandlers > 0 {
-		numHandlers += <-handlerChan
-	}
 }
diff --git a/examples/dummy-server/dummy-server.go b/examples/dummy-server/dummy-server.go
index db24fab..f3b0c8f 100644
--- a/examples/dummy-server/dummy-server.go
+++ b/examples/dummy-server/dummy-server.go
@@ -25,10 +25,6 @@ import "git.torproject.org/pluggable-transports/goptlib.git"
 
 var ptInfo pt.ServerInfo
 
-// When a connection handler starts, +1 is written to this channel; when it
-// ends, -1 is written.
-var handlerChan = make(chan int)
-
 func copyLoop(a, b net.Conn) {
 	var wg sync.WaitGroup
 	wg.Add(2)
@@ -48,11 +44,6 @@ func copyLoop(a, b net.Conn) {
 func handler(conn net.Conn) error {
 	defer conn.Close()
 
-	handlerChan <- 1
-	defer func() {
-		handlerChan <- -1
-	}()
-
 	or, err := pt.DialOr(&ptInfo, conn.RemoteAddr().String(), "dummy")
 	if err != nil {
 		return err
@@ -104,8 +95,6 @@ func main() {
 	}
 	pt.SmethodsDone()
 
-	var numHandlers int = 0
-	var sig os.Signal
 	sigChan := make(chan os.Signal, 1)
 	signal.Notify(sigChan, syscall.SIGTERM)
 
@@ -118,21 +107,11 @@ func main() {
 		}()
 	}
 
-	// keep track of handlers and wait for a signal
-	sig = nil
-	for sig == nil {
-		select {
-		case n := <-handlerChan:
-			numHandlers += n
-		case sig = <-sigChan:
-		}
-	}
+	// wait for a signal
+	<-sigChan
 
 	// signal received, shut down
 	for _, ln := range listeners {
 		ln.Close()
 	}
-	for numHandlers > 0 {
-		numHandlers += <-handlerChan
-	}
 }

_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits