From a48307b5e74271d8f4a955e49df987ca67af8442 Mon Sep 17 00:00:00 2001 From: David Scott Date: Fri, 15 Apr 2016 13:02:10 +0100 Subject: [PATCH] proxy: calling Close() on the Accept()ing fd won't cause it to return This seems to be a difference between the AF_VSOCK and AF_INET implementations. We work around it by exiting the proxy process immediately, which will clean up resources anyway. Signed-off-by: David Scott --- alpine/packages/proxy/proxy.go | 4 +++- alpine/packages/proxy/vendor/vsock/vsock.go | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/alpine/packages/proxy/proxy.go b/alpine/packages/proxy/proxy.go index aea703761..3c38b5ceb 100644 --- a/alpine/packages/proxy/proxy.go +++ b/alpine/packages/proxy/proxy.go @@ -67,6 +67,8 @@ func handleStopSignals(p libproxy.Proxy) { signal.Notify(s, os.Interrupt, syscall.SIGTERM, syscall.SIGSTOP) for range s { - p.Close() + os.Exit(0) + // The vsock proxy cannot be shutdown the same way as the TCP one: + //p.Close() } } diff --git a/alpine/packages/proxy/vendor/vsock/vsock.go b/alpine/packages/proxy/vendor/vsock/vsock.go index b0f734b99..dc7217874 100644 --- a/alpine/packages/proxy/vendor/vsock/vsock.go +++ b/alpine/packages/proxy/vendor/vsock/vsock.go @@ -81,6 +81,7 @@ func (v *vsockListener) Accept() (net.Conn, error) { } func (v *vsockListener) Close() error { + // Note this won't cause the Accept to unblock. return syscall.Close(v.accept_fd) }