diff --git a/pool/tree/pool.go b/pool/tree/pool.go index 60c205f..7b1afef 100644 --- a/pool/tree/pool.go +++ b/pool/tree/pool.go @@ -1012,7 +1012,7 @@ LOOP: continue } - p.addClientToMap(cnrNode.Hash(), treeCl) + treeCl = p.addClientToMap(cnrNode.Hash(), treeCl) } attempts-- @@ -1047,10 +1047,16 @@ func (p *Pool) getClientFromMap(hash uint64) (client, bool) { return cl, ok } -func (p *Pool) addClientToMap(hash uint64, cl client) { +func (p *Pool) addClientToMap(hash uint64, cl client) client { p.mutex.Lock() + defer p.mutex.Unlock() + + if old, ok := p.clientMap[hash]; ok { + _ = cl.close() + return old + } p.clientMap[hash] = cl - p.mutex.Unlock() + return cl } func (p *Pool) deleteClientFromMap(hash uint64) {