From be25396340598bc385788793c4176932afa80db8 Mon Sep 17 00:00:00 2001 From: zelig Date: Thu, 9 Apr 2015 13:58:11 +0100 Subject: [PATCH] separate lock for blacklist --- blockpool/peers.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/blockpool/peers.go b/blockpool/peers.go index 6109ca4b46..0193990386 100644 --- a/blockpool/peers.go +++ b/blockpool/peers.go @@ -57,7 +57,8 @@ type peer struct { // peers is the component keeping a record of peers in a hashmap // type peers struct { - lock sync.RWMutex + lock sync.RWMutex + bllock sync.Mutex bp *BlockPool errors *errs.Errors @@ -109,13 +110,15 @@ func (self *peers) peerError(id string, code int, format string, params ...inter // record time of offence in blacklist to implement suspension for PeerSuspensionInterval func (self *peers) addToBlacklist(id string) { - self.lock.Lock() - defer self.lock.Unlock() + self.bllock.Lock() + defer self.bllock.Unlock() self.blacklist[id] = time.Now() } // suspended checks if peer is still suspended, caller should hold peers.lock func (self *peers) suspended(id string) (s bool) { + self.bllock.Lock() + defer self.bllock.Unlock() if suspendedAt, ok := self.blacklist[id]; ok { if s = suspendedAt.Add(self.bp.Config.PeerSuspensionInterval).After(time.Now()); !s { // no longer suspended, delete entry