aboutsummaryrefslogtreecommitdiff
path: root/device.go
diff options
context:
space:
mode:
Diffstat (limited to 'device.go')
-rw-r--r--device.go15
1 files changed, 13 insertions, 2 deletions
diff --git a/device.go b/device.go
index 3ad53c9..dddb547 100644
--- a/device.go
+++ b/device.go
@@ -339,6 +339,8 @@ func (device *Device) RemovePeer(key NoisePublicKey) {
}
func (device *Device) RemoveAllPeers() {
+ device.noise.mutex.Lock()
+ defer device.noise.mutex.Unlock()
device.routing.mutex.Lock()
defer device.routing.mutex.Unlock()
@@ -354,16 +356,25 @@ func (device *Device) RemoveAllPeers() {
}
func (device *Device) Close() {
- device.log.Info.Println("Device closing")
if device.isClosed.Swap(true) {
return
}
- device.signal.stop.Broadcast()
+ device.log.Info.Println("Device closing")
+ device.state.changing.Set(true)
+ device.state.mutex.Lock()
+ defer device.state.mutex.Unlock()
+
device.tun.device.Close()
device.BindClose()
+
device.isUp.Set(false)
+
+ device.signal.stop.Broadcast()
+
device.RemoveAllPeers()
device.rate.limiter.Close()
+
+ device.state.changing.Set(false)
device.log.Info.Println("Interface closed")
}