[tor-commits] [meek/master] Factor out a startProcesses function, kill processes in main.

dcf at torproject.org dcf at torproject.org
Tue Apr 30 21:09:07 UTC 2019


commit 9436eba46455f8f0d0db7109959d7779e980fe9f
Author: David Fifield <david at bamsoftware.com>
Date:   Thu Apr 18 22:54:06 2019 -0600

    Factor out a startProcesses function, kill processes in main.
---
 meek-client-torbrowser/meek-client-torbrowser.go | 98 +++++++++++++++---------
 1 file changed, 60 insertions(+), 38 deletions(-)

diff --git a/meek-client-torbrowser/meek-client-torbrowser.go b/meek-client-torbrowser/meek-client-torbrowser.go
index 16f0ebc..ce79193 100644
--- a/meek-client-torbrowser/meek-client-torbrowser.go
+++ b/meek-client-torbrowser/meek-client-torbrowser.go
@@ -315,6 +315,53 @@ func runMeekClient(helperAddr string, meekClientCommandLine []string) (cmd *exec
 	return cmd, nil
 }
 
+// Run firefox and meek-client and return the processes. When err is nil, both
+// processes were started successfully. If err is non-nil, one or both processes
+// may have failed to start. If a process did not start, its corresponding
+// return value will be nil. The caller is responsible for terminating whatever
+// processes were started, whether or not err is nil.
+func startProcesses(sigChan <-chan os.Signal, meekClientCommandLine []string) (firefoxCmd *exec.Cmd, meekClientCmd *exec.Cmd, err error) {
+	// Start firefox.
+	var stdout io.Reader
+	firefoxCmd, stdout, err = runFirefox()
+	if err != nil {
+		firefoxCmd = nil
+		err = fmt.Errorf("error running firefox: %v", err)
+		return
+	}
+
+	// Find out the helper's listening address.
+	addrChan := make(chan string)
+	errChan := make(chan error)
+	go func() {
+		addr, err := grepHelperAddr(stdout)
+		if err == nil {
+			addrChan <- addr
+		} else {
+			errChan <- err
+		}
+	}()
+	var helperAddr string
+	select {
+	case sig := <-sigChan:
+		err = fmt.Errorf("received signal %v before starting meek-client", sig)
+		return
+	case err = <-errChan:
+		err = fmt.Errorf("error looking for helper address: %v", err)
+		return
+	case helperAddr = <-addrChan:
+	}
+
+	// Start meek-client with the helper address.
+	meekClientCmd, err = runMeekClient(helperAddr, meekClientCommandLine)
+	if err != nil {
+		meekClientCmd = nil
+		err = fmt.Errorf("error running meek-client: %v", err)
+		return
+	}
+	return
+}
+
 func main() {
 	var logFilename string
 
@@ -361,48 +408,23 @@ func main() {
 		}()
 	}
 
-	// Start firefox.
-	firefoxCmd, stdout, err := runFirefox()
-	if err != nil {
-		log.Print(err)
-		return
-	}
-	defer logKill(firefoxCmd.Process)
-
-	// Find out the helper's listening address.
-	addrChan := make(chan string)
-	errChan := make(chan error)
-	go func() {
-		addr, err := grepHelperAddr(stdout)
-		if err == nil {
-			addrChan <- addr
-		} else {
-			errChan <- err
-		}
-	}()
-	var helperAddr string
-	select {
-	case sig := <-sigChan:
+	firefoxCmd, meekClientCmd, err := startProcesses(sigChan, meekClientCommandLine)
+	if err == nil {
+		// Both processes started successfully. Now let them run until
+		// we are instructed to stop.
+		sig := <-sigChan
 		log.Printf("sig %s", sig)
-		return
-	case err = <-errChan:
+		logSignal(meekClientCmd.Process, sig)
+	} else {
+		// Otherwise don't wait, go ahead and terminate whatever
+		// processes were started.
 		log.Print(err)
-		return
-	case helperAddr = <-addrChan:
 	}
 
-	// Start meek-client with the helper address.
-	meekClientCmd, err := runMeekClient(helperAddr, meekClientCommandLine)
-	if err != nil {
-		log.Print(err)
-		return
+	if firefoxCmd != nil {
+		logKill(firefoxCmd.Process)
 	}
-	defer logKill(meekClientCmd.Process)
-
-	sig := <-sigChan
-	log.Printf("sig %s", sig)
-	err = logSignal(meekClientCmd.Process, sig)
-	if err != nil {
-		log.Print(err)
+	if meekClientCmd != nil {
+		logKill(firefoxCmd.Process)
 	}
 }





More information about the tor-commits mailing list