diff options
| -rw-r--r-- | daemonize.go | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/daemonize.go b/daemonize.go index b9857e7..9869258 100644 --- a/daemonize.go +++ b/daemonize.go @@ -10,19 +10,21 @@ import (  	"github.com/rfjakob/gocryptfs/internal/tlog"  ) -// The child sends us USR1 if the mount was successful +// The child sends us USR1 if the mount was successful. Exit with error code +// 0 if we get it.  func exitOnUsr1() {  	c := make(chan os.Signal, 1)  	signal.Notify(c, syscall.SIGUSR1) -	<-c -	os.Exit(0) +	go func() { +		<-c +		os.Exit(0) +	}()  }  // forkChild - execute ourselves once again, this time with the "-fg" flag, and  // wait for SIGUSR1 or child exit.  // This is a workaround for the missing true fork function in Go.  func forkChild() int { -	go exitOnUsr1()  	name := os.Args[0]  	newArgs := []string{"-fg", fmt.Sprintf("-notifypid=%d", os.Getpid())}  	newArgs = append(newArgs, os.Args[1:]...) @@ -30,6 +32,7 @@ func forkChild() int {  	c.Stdout = os.Stdout  	c.Stderr = os.Stderr  	c.Stdin = os.Stdin +	exitOnUsr1()  	err := c.Start()  	if err != nil {  		tlog.Fatal.Printf("forkChild: starting %s failed: %v\n", name, err) | 
