aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--peer.go10
1 files changed, 10 insertions, 0 deletions
diff --git a/peer.go b/peer.go
index 359e83566..932dbdc18 100644
--- a/peer.go
+++ b/peer.go
@@ -2,6 +2,7 @@ package eth
import (
"bytes"
+ "container/list"
"fmt"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil"
@@ -515,6 +516,15 @@ func (p *Peer) Stop() {
p.writeMessage(ethwire.NewMessage(ethwire.MsgDiscTy, ""))
p.conn.Close()
}
+
+ // Pre-emptively remove the peer; don't wait for reaping. We already know it's dead if we are here
+ p.ethereum.peerMut.Lock()
+ defer p.ethereum.peerMut.Unlock()
+ eachPeer(p.ethereum.peers, func(peer *Peer, e *list.Element) {
+ if peer == p {
+ p.ethereum.peers.Remove(e)
+ }
+ })
}
func (p *Peer) pushHandshake() error {