Removed peers from peerlist as soon as they disconnect. Might fix #13

We used to wait for the reaping timer to clean up the peerlist, not any longer
This commit is contained in:
Maran 2014-05-12 16:30:21 +02:00
parent 8fe0864680
commit 52b664b0ae

10
peer.go
View File

@ -2,6 +2,7 @@ package eth
import ( import (
"bytes" "bytes"
"container/list"
"fmt" "fmt"
"github.com/ethereum/eth-go/ethchain" "github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
@ -515,6 +516,15 @@ func (p *Peer) Stop() {
p.writeMessage(ethwire.NewMessage(ethwire.MsgDiscTy, "")) p.writeMessage(ethwire.NewMessage(ethwire.MsgDiscTy, ""))
p.conn.Close() 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 { func (p *Peer) pushHandshake() error {