From 3d5767714c5accd2e39535b33a7b6343043b54e4 Mon Sep 17 00:00:00 2001 From: David Scott Date: Sun, 3 Apr 2016 14:42:17 +0100 Subject: [PATCH] proxy: on exit, return to main for cleanup Previously the proxy.go would directly call `os.Exit`. This patch causes control to return to `main` where we can tear down any port forward. Signed-off-by: David Scott --- alpine/packages/proxy/main.go | 9 ++++++++- alpine/packages/proxy/proxy.go | 7 +++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/alpine/packages/proxy/main.go b/alpine/packages/proxy/main.go index 654b6e667..ead8b92cb 100644 --- a/alpine/packages/proxy/main.go +++ b/alpine/packages/proxy/main.go @@ -1,11 +1,18 @@ package main import ( + "log" + "os" "pkg/proxy" ) func main() { host, container := parseHostContainerAddrs() - proxyForever(proxy.NewProxy(host, container)) + err := proxyForever(proxy.NewProxy(host, container)) + + if err != nil { + os.Exit(0) + } + os.Exit(1) } diff --git a/alpine/packages/proxy/proxy.go b/alpine/packages/proxy/proxy.go index d72e131ac..72b5d5734 100644 --- a/alpine/packages/proxy/proxy.go +++ b/alpine/packages/proxy/proxy.go @@ -13,13 +13,13 @@ import ( ) // proxyForever signals the parent success/failure and runs the proxy forever -func proxyForever(p proxy.Proxy, err error) { +func proxyForever(p proxy.Proxy, err error) error { f := os.NewFile(3, "signal-parent") if err != nil { fmt.Fprintf(f, "1\n%s", err) f.Close() - os.Exit(1) + return err } go handleStopSignals(p) fmt.Fprint(f, "0\n") @@ -27,6 +27,7 @@ func proxyForever(p proxy.Proxy, err error) { // Run will block until the proxy stops p.Run() + return nil } // From docker/libnetwork/portmapper/proxy.go: @@ -64,7 +65,5 @@ func handleStopSignals(p proxy.Proxy) { for range s { p.Close() - - os.Exit(0) } }