diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2018-02-04 16:46:24 +0100 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2018-02-04 16:46:24 +0100 |
commit | 9c5083bd1982f7c82f8007cbaec4da4da70e0aad (patch) | |
tree | f3c7d8075ea8d42872c1500714fd338091913012 /device.go | |
parent | a0f54cbe5ac2cd8b8296c2c57c30029dd349cff0 (diff) |
Removed debugging locks
Diffstat (limited to 'device.go')
-rw-r--r-- | device.go | 80 |
1 files changed, 36 insertions, 44 deletions
@@ -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 |