X-Git-Url: http://www.git.cypherpunks.ru/?p=govpn.git;a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fgovpn%2Fcmd%2Fgovpn-server%2Ftcp.go;fp=src%2Fcypherpunks.ru%2Fgovpn%2Fcmd%2Fgovpn-server%2Ftcp.go;h=aab59b723c57986d5520e64e6251f45c5f3e812e;hp=61eb1e07395fcc8b10ddf690d43b706b0f28300b;hb=c982ccb214ba8d0fd8a30dee7439ea2db1559f6f;hpb=b772182c156a0eab0798d12ca196610ac736035e diff --git a/src/cypherpunks.ru/govpn/cmd/govpn-server/tcp.go b/src/cypherpunks.ru/govpn/cmd/govpn-server/tcp.go index 61eb1e0..aab59b7 100644 --- a/src/cypherpunks.ru/govpn/cmd/govpn-server/tcp.go +++ b/src/cypherpunks.ru/govpn/cmd/govpn-server/tcp.go @@ -60,6 +60,9 @@ func handleTCP(conn net.Conn) { 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 @@ -96,16 +99,13 @@ func handleTCP(conn net.Conn) { `[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 { @@ -117,16 +117,11 @@ func handleTCP(conn net.Conn) { 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(), @@ -152,15 +147,9 @@ func handleTCP(conn net.Conn) { 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