les: fixed deadlock

This commit is contained in:
Zsolt Felfoldi 2020-01-03 17:47:50 +01:00
parent 5486e28bbf
commit d338384f9e

View file

@ -243,7 +243,7 @@ func newClientPool(db ethdb.Database, minCap, freeClientCap uint64, clock mclock
pool.tryActivateClients() pool.tryActivateClients()
for _, c := range pool.dropInactivePeers[pool.dropInactiveCounter] { for _, c := range pool.dropInactivePeers[pool.dropInactiveCounter] {
if _, ok := pool.connectedMap[c.id]; ok && !c.active && !c.priority { if _, ok := pool.connectedMap[c.id]; ok && !c.active && !c.priority {
pool.disconnect(c.peer) pool.disconnectLocked(c.peer)
} }
} }
delete(pool.dropInactivePeers, pool.dropInactiveCounter) delete(pool.dropInactivePeers, pool.dropInactiveCounter)
@ -406,6 +406,10 @@ func (f *clientPool) disconnect(p clientPeer) {
f.lock.Lock() f.lock.Lock()
defer f.lock.Unlock() defer f.lock.Unlock()
f.disconnectLocked(p)
}
func (f *clientPool) disconnectLocked(p clientPeer) {
// Short circuit if client pool is already closed. // Short circuit if client pool is already closed.
if f.closed { if f.closed {
return return