From 85f5849d0b7be6de4a3d6f82209fa29f1e0b7a9c Mon Sep 17 00:00:00 2001 From: John Maguire Date: Fri, 11 Nov 2022 09:18:43 -0700 Subject: [PATCH] Fix a hang when shutting down Android (#772) --- overlay/tun_android.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/overlay/tun_android.go b/overlay/tun_android.go index 3bea907..321aec8 100644 --- a/overlay/tun_android.go +++ b/overlay/tun_android.go @@ -28,11 +28,13 @@ func newTunFromFd(l *logrus.Logger, deviceFd int, cidr *net.IPNet, _ int, routes return nil, err } + // XXX Android returns an fd in non-blocking mode which is necessary for shutdown to work properly. + // Be sure not to call file.Fd() as it will set the fd to blocking mode. file := os.NewFile(uintptr(deviceFd), "/dev/net/tun") return &tun{ ReadWriteCloser: file, - fd: int(file.Fd()), + fd: deviceFd, cidr: cidr, l: l, routeTree: routeTree,