summaryrefslogtreecommitdiff
path: root/src/conn.go
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2018-01-26 22:52:32 +0100
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2018-01-26 22:52:32 +0100
commitf73d2fb2d96bc3fbc8bc4cce452e3c19689de01e (patch)
tree52e392cf6313e7e9e5e87539fcb5e88817e47f37 /src/conn.go
parent068d932f2c54f3b1cf0873d74113205dbeb1816f (diff)
downloadwireguard-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.go19
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)