|
|
@@ -93,14 +93,22 @@ func NewProtocolManager(protocolVersion, networkId int, mux *event.TypeMux, txpo
|
|
|
}
|
|
|
|
|
|
func (pm *ProtocolManager) removePeer(id string) {
|
|
|
- // Unregister the peer from the downloader
|
|
|
- pm.downloader.UnregisterPeer(id)
|
|
|
+ // Short circuit if the peer was already removed
|
|
|
+ peer := pm.peers.Peer(id)
|
|
|
+ if peer == nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ glog.V(logger.Debug).Infoln("Removing peer", id)
|
|
|
|
|
|
- // Remove the peer from the Ethereum peer set too
|
|
|
- glog.V(logger.Detail).Infoln("Removing peer", id)
|
|
|
+ // Unregister the peer from the downloader and Ethereum peer set
|
|
|
+ pm.downloader.UnregisterPeer(id)
|
|
|
if err := pm.peers.Unregister(id); err != nil {
|
|
|
glog.V(logger.Error).Infoln("Removal failed:", err)
|
|
|
}
|
|
|
+ // Hard disconnect at the networking layer
|
|
|
+ if peer != nil {
|
|
|
+ peer.Peer.Disconnect(p2p.DiscUselessPeer)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
func (pm *ProtocolManager) Start() {
|