X-Git-Url: http://www.git.cypherpunks.ru/?p=govpn.git;a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fgovpn%2Fcmd%2Fgovpn-server%2Fudp.go;h=037351778f566605fcc28733350ac60d663cc978;hp=dbfc68948bf22aee00fbcceca90af29d6713aef1;hb=8cdc4548bc7b6c8b774c2be3b7cd350756df25b6;hpb=f926c8f7ea311927ecc7c86ac7fa3b804279e8a9 diff --git a/src/cypherpunks.ru/govpn/cmd/govpn-server/udp.go b/src/cypherpunks.ru/govpn/cmd/govpn-server/udp.go index dbfc689..0373517 100644 --- a/src/cypherpunks.ru/govpn/cmd/govpn-server/udp.go +++ b/src/cypherpunks.ru/govpn/cmd/govpn-server/udp.go @@ -136,12 +136,20 @@ func startUDP() { peersByIDLock.RLock() addrPrev, exists = peersByID[*peer.ID] peersByIDLock.RUnlock() + var peerPrev *PeerState if exists { peersLock.Lock() - peers[addrPrev].terminator <- struct{}{} + peerPrev = peers[addrPrev] + if peerPrev == nil { + exists = false + peersLock.Unlock() + } + } + if exists { + peerPrev.terminator <- struct{}{} psNew := &PeerState{ peer: peer, - tap: peers[addrPrev].tap, + tap: peerPrev.tap, terminator: make(chan struct{}), } go func(peer *govpn.Peer, tap *govpn.TAP, terminator chan struct{}) {