swarm/network/stream: fix a goroutine leak in Registry (#19139)

* swarm/network/stream: fix a goroutine leak in Registry

* swarm/network, swamr/network/stream: Kademlia close addr count and depth change chans

* swarm/network/stream: rename close channel to quit

* swarm/network/stream: fix sync between NewRegistry goroutine and Close method
This commit is contained in:
Janoš Guljaš
2019-02-20 14:45:25 +01:00
committed by Viktor Trón
parent f49f95e2b0
commit ba2dfa5ce4
2 changed files with 60 additions and 9 deletions

View File

@@ -333,6 +333,18 @@ func (k *Kademlia) NeighbourhoodDepthC() <-chan int {
return k.nDepthC
}
// CloseNeighbourhoodDepthC closes the channel returned by
// NeighbourhoodDepthC and stops sending neighbourhood change.
func (k *Kademlia) CloseNeighbourhoodDepthC() {
k.lock.Lock()
defer k.lock.Unlock()
if k.nDepthC != nil {
close(k.nDepthC)
k.nDepthC = nil
}
}
// sendNeighbourhoodDepthChange sends new neighbourhood depth to k.nDepth channel
// if it is initialized.
func (k *Kademlia) sendNeighbourhoodDepthChange() {
@@ -362,6 +374,18 @@ func (k *Kademlia) AddrCountC() <-chan int {
return k.addrCountC
}
// CloseAddrCountC closes the channel returned by
// AddrCountC and stops sending address count change.
func (k *Kademlia) CloseAddrCountC() {
k.lock.Lock()
defer k.lock.Unlock()
if k.addrCountC != nil {
close(k.addrCountC)
k.addrCountC = nil
}
}
// Off removes a peer from among live peers
func (k *Kademlia) Off(p *Peer) {
k.lock.Lock()