summaryrefslogtreecommitdiffhomepage
path: root/device.go
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2018-02-04 16:46:24 +0100
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2018-02-04 16:46:24 +0100
commit9c5083bd1982f7c82f8007cbaec4da4da70e0aad (patch)
treef3c7d8075ea8d42872c1500714fd338091913012 /device.go
parenta0f54cbe5ac2cd8b8296c2c57c30029dd349cff0 (diff)
Removed debugging locks
Diffstat (limited to 'device.go')
-rw-r--r--device.go80
1 files changed, 36 insertions, 44 deletions
diff --git a/device.go b/device.go
index c041987..22e0990 100644
--- a/device.go
+++ b/device.go
@@ -1,7 +1,6 @@
package main
import (
- "github.com/sasha-s/go-deadlock"
"runtime"
"sync"
"sync/atomic"
@@ -16,31 +15,31 @@ type Device struct {
// synchronized resources (locks acquired in order)
state struct {
- mutex deadlock.Mutex
+ mutex sync.Mutex
changing AtomicBool
current bool
}
net struct {
- mutex deadlock.RWMutex
+ mutex sync.RWMutex
bind Bind // bind interface
port uint16 // listening port
fwmark uint32 // mark value (0 = disabled)
}
noise struct {
- mutex deadlock.RWMutex
+ mutex sync.RWMutex
privateKey NoisePrivateKey
publicKey NoisePublicKey
}
routing struct {
- mutex deadlock.RWMutex
+ mutex sync.RWMutex
table RoutingTable
}
peers struct {
- mutex deadlock.RWMutex
+ mutex sync.RWMutex
keyMap map[NoisePublicKey]*Peer
}
@@ -101,53 +100,46 @@ func deviceUpdateState(device *Device) {
return
}
- func() {
+ // compare to current state of device
- // compare to current state of device
-
- device.state.mutex.Lock()
- defer device.state.mutex.Unlock()
-
- newIsUp := device.isUp.Get()
-
- if newIsUp == device.state.current {
- device.state.changing.Set(false)
- return
- }
-
- // change state of device
-
- switch newIsUp {
- case true:
- if err := device.BindUpdate(); err != nil {
- device.isUp.Set(false)
- break
- }
+ device.state.mutex.Lock()
- device.peers.mutex.Lock()
- defer device.peers.mutex.Unlock()
+ newIsUp := device.isUp.Get()
- for _, peer := range device.peers.keyMap {
- peer.Start()
- }
+ if newIsUp == device.state.current {
+ device.state.changing.Set(false)
+ device.state.mutex.Unlock()
+ return
+ }
- case false:
- device.BindClose()
+ // change state of device
- device.peers.mutex.Lock()
- defer device.peers.mutex.Unlock()
+ switch newIsUp {
+ case true:
+ if err := device.BindUpdate(); err != nil {
+ device.isUp.Set(false)
+ break
+ }
+ device.peers.mutex.Lock()
+ for _, peer := range device.peers.keyMap {
+ peer.Start()
+ }
+ device.peers.mutex.Unlock()
- for _, peer := range device.peers.keyMap {
- println("stopping peer")
- peer.Stop()
- }
+ case false:
+ device.BindClose()
+ device.peers.mutex.Lock()
+ for _, peer := range device.peers.keyMap {
+ peer.Stop()
}
+ device.peers.mutex.Unlock()
+ }
- // update state variables
+ // update state variables
- device.state.current = newIsUp
- device.state.changing.Set(false)
- }()
+ device.state.current = newIsUp
+ device.state.changing.Set(false)
+ device.state.mutex.Unlock()
// check for state change in the mean time