From c2af4c0c7ca8a4af705cf97650006add251b7831 Mon Sep 17 00:00:00 2001 From: xjasonlyu Date: Sun, 27 Mar 2022 20:44:02 +0800 Subject: [PATCH] Fix: wait for device to close --- core/device/device.go | 3 +++ core/device/tun/tun_wireguard.go | 1 + engine/engine.go | 13 ++++++++----- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core/device/device.go b/core/device/device.go index 19e4f0a..083e85c 100644 --- a/core/device/device.go +++ b/core/device/device.go @@ -17,4 +17,7 @@ type Device interface { // Type returns the driver type of the device. Type() string + + // Wait waits for the device to close. + Wait() } diff --git a/core/device/tun/tun_wireguard.go b/core/device/tun/tun_wireguard.go index 33691e2..6ee2e0e 100644 --- a/core/device/tun/tun_wireguard.go +++ b/core/device/tun/tun_wireguard.go @@ -79,5 +79,6 @@ func (t *TUN) Name() string { } func (t *TUN) Close() error { + t.Endpoint.Close() return t.nt.Close() } diff --git a/engine/engine.go b/engine/engine.go index a4a352f..460c7c8 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -80,13 +80,16 @@ func (e *engine) start() error { return nil } -func (e *engine) stop() error { +func (e *engine) stop() (err error) { if e.device != nil { - return e.device.Close() + err = e.device.Close() + e.device.Wait() } - e.stack.Close() - e.stack.Wait() - return nil + if e.stack != nil { + e.stack.Close() + e.stack.Wait() + } + return err } func (e *engine) insert(k *Key) {