Merge pull request #2796 from pcfdev-forks/master

Ensure VPNKit process is properly killed when errors occur
This commit is contained in:
Rolf Neugebauer 2017-12-08 11:26:49 +00:00 committed by GitHub
commit 86f12e15f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -241,14 +241,10 @@ func runHyperKit(args []string) {
if err != nil {
log.Fatalln("Unable to start vpnkit: ", err)
}
defer func() {
if vpnkitProcess != nil {
err := vpnkitProcess.Kill()
if err != nil {
log.Println(err)
}
}
}()
defer shutdownVPNKit(vpnkitProcess)
log.RegisterExitHandler(func() {
shutdownVPNKit(vpnkitProcess)
})
// The guest will use this 9P mount to configure which ports to forward
h.Sockets9P = []hyperkit.Socket9P{{Path: vpnkitPortSocket, Tag: "port"}}
// VSOCK port 62373 is used to pass traffic from host->guest
@ -296,6 +292,7 @@ func runHyperKit(args []string) {
log.Fatalf("Publish ports failed with: %v", err)
}
defer f()
log.RegisterExitHandler(f)
default:
log.Fatalf("Port publishing requires %q or %q networking mode", hyperkitNetworkingDockerForMac, hyperkitNetworkingVPNKit)
}
@ -307,6 +304,16 @@ func runHyperKit(args []string) {
}
}
func shutdownVPNKit(process *os.Process) {
if process == nil {
return
}
if err := process.Kill(); err != nil {
log.Println(err)
}
}
// createListenSocket creates a new unix domain socket and returns the open file
func createListenSocket(path string) (*os.File, error) {
os.Remove(path)