Rework of entire locking system
Locking on the Device instance is now much more fined-grained, seperating out the fields into "resources" st. most common interactions only require a small number.
This commit is contained in:
parent
1e42b14022
commit
029410b118
10 changed files with 386 additions and 239 deletions
17
src/conn.go
17
src/conn.go
|
|
@ -65,12 +65,12 @@ func unsafeCloseBind(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()
|
||||
device.net.mutex.Lock()
|
||||
defer device.net.mutex.Unlock()
|
||||
|
||||
device.peers.mutex.Lock()
|
||||
defer device.peers.mutex.Unlock()
|
||||
|
||||
// close existing sockets
|
||||
|
||||
|
|
@ -85,6 +85,7 @@ func (device *Device) BindUpdate() error {
|
|||
// bind to new port
|
||||
|
||||
var err error
|
||||
netc := &device.net
|
||||
netc.bind, netc.port, err = CreateBind(netc.port)
|
||||
if err != nil {
|
||||
netc.bind = nil
|
||||
|
|
@ -100,12 +101,12 @@ func (device *Device) BindUpdate() error {
|
|||
|
||||
// clear cached source addresses
|
||||
|
||||
for _, peer := range device.peers {
|
||||
for _, peer := range device.peers.keyMap {
|
||||
peer.mutex.Lock()
|
||||
defer peer.mutex.Unlock()
|
||||
if peer.endpoint != nil {
|
||||
peer.endpoint.ClearSrc()
|
||||
}
|
||||
peer.mutex.Unlock()
|
||||
}
|
||||
|
||||
// start receiving routines
|
||||
|
|
@ -120,10 +121,8 @@ func (device *Device) BindUpdate() error {
|
|||
}
|
||||
|
||||
func (device *Device) BindClose() error {
|
||||
device.mutex.Lock()
|
||||
device.net.mutex.Lock()
|
||||
err := unsafeCloseBind(device)
|
||||
device.net.mutex.Unlock()
|
||||
device.mutex.Unlock()
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue