var peer *govpn.Peer
var tap *govpn.TAP
var conf *govpn.PeerConf
+ var addrPrev string
+ var peerPrevI interface{}
+ var peerPrev *PeerState
for {
if prev == len(buf) {
break
`[handshake-completed bind="%s" addr="%s" peer="%s"]`,
*bindAddr, addr, peerID.String(),
)
- peersByIDLock.RLock()
- addrPrev, exists := peersByID[*peer.ID]
- peersByIDLock.RUnlock()
- var peerPrev *PeerState
+ addrPrevI, exists := peersByID.Load(*peer.ID)
if exists {
- peersLock.Lock()
- peerPrev = peers[addrPrev]
- if peerPrev == nil {
- exists = false
- peersLock.Unlock()
+ addrPrev = addrPrevI.(string)
+ peerPrevI, exists = peers.Load(addrPrev)
+ if exists {
+ peerPrev = peerPrevI.(*PeerState)
+ exists = peerPrev == nil
}
}
if exists {
terminator: make(chan struct{}),
}
go govpn.PeerTapProcessor(ps.peer, ps.tap, ps.terminator)
- peersByIDLock.Lock()
- kpLock.Lock()
- delete(peers, addrPrev)
- delete(knownPeers, addrPrev)
- peers[addr] = ps
- knownPeers[addr] = &peer
- peersByID[*peer.ID] = addr
- peersLock.Unlock()
- peersByIDLock.Unlock()
- kpLock.Unlock()
+ peers.Delete(addrPrev)
+ peers.Store(addr, ps)
+ knownPeers.Delete(addrPrev)
+ knownPeers.Store(addr, &peer)
+ peersByID.Store(*peer.ID, addr)
govpn.Printf(
`[rehandshake-completed bind="%s" peer="%s"]`,
*bindAddr, peerID.String(),
terminator: make(chan struct{}, 1),
}
go govpn.PeerTapProcessor(ps.peer, ps.tap, ps.terminator)
- peersLock.Lock()
- peersByIDLock.Lock()
- kpLock.Lock()
- peers[addr] = ps
- peersByID[*peer.ID] = addr
- knownPeers[addr] = &peer
- peersLock.Unlock()
- peersByIDLock.Unlock()
- kpLock.Unlock()
+ peers.Store(addr, ps)
+ peersByID.Store(*peer.ID, addr)
+ knownPeers.Store(addr, &peer)
govpn.Printf(`[peer-created bind="%s" peer="%s"]`, *bindAddr, peerID.String())
}
break