From 429febde801348f961d64d8ea82d67287e057e5c Mon Sep 17 00:00:00 2001 From: Callum Michael Waters Date: Wed, 11 Mar 2020 15:00:22 +0100 Subject: [PATCH] reconfigure mutexes --- p2p/pex/addrbook.go | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/p2p/pex/addrbook.go b/p2p/pex/addrbook.go index 15019f5cd..c99ea75e5 100644 --- a/p2p/pex/addrbook.go +++ b/p2p/pex/addrbook.go @@ -210,12 +210,7 @@ func (a *addrBook) RemoveAddress(addr *p2p.NetAddress) { a.mtx.Lock() defer a.mtx.Unlock() - ka := a.addrLookup[addr.ID] - if ka == nil { - return - } - a.Logger.Info("Remove address from book", "addr", addr) - a.removeFromAllBuckets(ka) + a.removeAddress(addr) } // IsGood returns true if peer was ever marked as good and haven't @@ -332,19 +327,22 @@ func (a *addrBook) MarkAttempt(addr *p2p.NetAddress) { // MarkBad implements AddrBook. Kicks address out from book, places // the address in the badPeers pool. func (a *addrBook) MarkBad(addr *p2p.NetAddress) { + a.mtx.Lock() + defer a.mtx.Unlock() + if a.addBadPeer(addr) { - a.RemoveAddress(addr) + a.removeAddress(addr) } } func (a *addrBook) ReinstateBadPeers() { + a.mtx.Lock() + defer a.mtx.Unlock() for _, ka := range a.badPeers { if !ka.isBanned(defaultBanTime) { - a.mtx.Lock() bucket := a.calcNewBucket(ka.Addr, ka.Src) a.addToNewBucket(ka, bucket) delete(a.badPeers, ka.ID()) - a.mtx.Unlock() } } } @@ -744,6 +742,15 @@ func (a *addrBook) moveToOld(ka *knownAddress) { } } +func (a *addrBook) removeAddress(addr *p2p.NetAddress) { + ka := a.addrLookup[addr.ID] + if ka == nil { + return + } + a.Logger.Info("Remove address from book", "addr", addr) + a.removeFromAllBuckets(ka) +} + func (a *addrBook) addBadPeer(addr *p2p.NetAddress) bool { a.mtx.Lock() defer a.mtx.Unlock() @@ -751,10 +758,12 @@ func (a *addrBook) addBadPeer(addr *p2p.NetAddress) bool { // check it exists in addrbook ka := a.addrLookup[addr.ID] // check address is not already there - if _, alreadyBadPeer := a.badPeers[addr.ID]; ka != nil && !alreadyBadPeer { - // add to bad peer list - ka.ban() - a.badPeers[addr.ID] = ka + if ka != nil { + if _, alreadyBadPeer := a.badPeers[addr.ID]; !alreadyBadPeer { + // add to bad peer list + ka.ban() + a.badPeers[addr.ID] = ka + } return true } return false