From 4e4c9052f436b86729b853715086e9445c76e185 Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Thu, 26 Mar 2015 06:30:50 +0000 Subject: Attempt to detect if the parent crashed without killing obfs4proxy. The ideal solution here would be to implement #15435, but till then use one of several kludges: * Linux - prctl() so that the kernel SIGTERMs on parent exit. * Other U*ix - Poll the parent process id once a second, and SIGTERM ourself/exit if it changes. Former is better since all the normal cleanup if any gets done. * Windows - Log a warning. --- obfs4proxy/obfs4proxy.go | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'obfs4proxy/obfs4proxy.go') diff --git a/obfs4proxy/obfs4proxy.go b/obfs4proxy/obfs4proxy.go index 53a0218..b27d75d 100644 --- a/obfs4proxy/obfs4proxy.go +++ b/obfs4proxy/obfs4proxy.go @@ -386,6 +386,9 @@ func getVersion() string { } func main() { + // Initialize parent process monitoring as early as possible. + pmonErr := initParentMonitor() + // Handle the command line arguments. _, execName := path.Split(os.Args[0]) showVer := flag.Bool("version", false, "Print version and exit") @@ -418,6 +421,9 @@ func main() { log.Fatalf("[ERROR]: %s - failed to initialize logging", execName) } else { noticef("%s - launched", getVersion()) + if pmonErr != nil { + warnf("%s - failed to initialize parent monitor: %s", execName, pmonErr) + } } if isClient { infof("%s - initializing client transport listeners", execName) -- cgit v1.2.3