diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2018-01-26 22:52:32 +0100 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2018-01-26 22:52:32 +0100 |
commit | f73d2fb2d96bc3fbc8bc4cce452e3c19689de01e (patch) | |
tree | 52e392cf6313e7e9e5e87539fcb5e88817e47f37 /src/conn.go | |
parent | 068d932f2c54f3b1cf0873d74113205dbeb1816f (diff) | |
download | wireguard-go-f73d2fb2d96bc3fbc8bc4cce452e3c19689de01e.tar.gz wireguard-go-f73d2fb2d96bc3fbc8bc4cce452e3c19689de01e.zip |
Added initial version of peer teardown
There is a double lock issue with device.Close which has yet to be
resolved.
Diffstat (limited to 'src/conn.go')
-rw-r--r-- | src/conn.go | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/conn.go b/src/conn.go index 1d033ff..c2f5dee 100644 --- a/src/conn.go +++ b/src/conn.go @@ -64,9 +64,13 @@ func unsafeCloseBind(device *Device) error { return err } -/* Must hold device and net lock - */ -func unsafeUpdateBind(device *Device) error { +func (device *Device) BindUpdate() error { + device.mutex.Lock() + defer device.mutex.Unlock() + + netc := &device.net + netc.mutex.Lock() + defer netc.mutex.Unlock() // close existing sockets @@ -74,18 +78,13 @@ func unsafeUpdateBind(device *Device) error { return err } - // assumption: netc.update WaitGroup should be exactly 1 - // open new sockets if device.isUp.Get() { - device.log.Debug.Println("UDP bind updating") - // bind to new port var err error - netc := &device.net netc.bind, netc.port, err = CreateBind(netc.port) if err != nil { netc.bind = nil @@ -109,7 +108,7 @@ func unsafeUpdateBind(device *Device) error { peer.mutex.Unlock() } - // decrease waitgroup to 0 + // start receiving routines go device.RoutineReceiveIncoming(ipv4.Version, netc.bind) go device.RoutineReceiveIncoming(ipv6.Version, netc.bind) @@ -120,7 +119,7 @@ func unsafeUpdateBind(device *Device) error { return nil } -func closeBind(device *Device) error { +func (device *Device) BindClose() error { device.mutex.Lock() device.net.mutex.Lock() err := unsafeCloseBind(device) |