Broadcast "peerList" event upon removing or adding peers

pull/150/head
obscuren 11 years ago
parent 6c91ffcfbe
commit f382221b28
  1. 22
      ethereum.go
  2. 9
      peer.go

@ -165,6 +165,8 @@ func (s *Ethereum) AddPeer(conn net.Conn) {
ethutil.Config.Log.Debugf("[SERV] Max connected peers reached. Not adding incoming peer.") ethutil.Config.Log.Debugf("[SERV] Max connected peers reached. Not adding incoming peer.")
} }
} }
s.reactor.Post("peerList", s.peers)
} }
func (s *Ethereum) ProcessPeerList(addrs []string) { func (s *Ethereum) ProcessPeerList(addrs []string) {
@ -303,12 +305,26 @@ func (s *Ethereum) Peers() *list.List {
} }
func (s *Ethereum) reapPeers() { func (s *Ethereum) reapPeers() {
eachPeer(s.peers, func(p *Peer, e *list.Element) {
if atomic.LoadInt32(&p.disconnect) == 1 || (p.inbound && (time.Now().Unix()-p.lastPong) > int64(5*time.Minute)) {
s.removePeerElement(e)
}
})
}
func (s *Ethereum) removePeerElement(e *list.Element) {
s.peerMut.Lock() s.peerMut.Lock()
defer s.peerMut.Unlock() defer s.peerMut.Unlock()
eachPeer(s.peers, func(p *Peer, e *list.Element) { s.peers.Remove(e)
if atomic.LoadInt32(&p.disconnect) == 1 || (p.inbound && (time.Now().Unix()-p.lastPong) > int64(5*time.Minute)) {
s.peers.Remove(e) s.reactor.Post("peerList", s.peers)
}
func (s *Ethereum) RemovePeer(p *Peer) {
eachPeer(s.peers, func(peer *Peer, e *list.Element) {
if peer == p {
s.removePeerElement(e)
} }
}) })
} }

@ -2,7 +2,6 @@ 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"
@ -523,13 +522,7 @@ func (p *Peer) Stop() {
} }
// Pre-emptively remove the peer; don't wait for reaping. We already know it's dead if we are here // Pre-emptively remove the peer; don't wait for reaping. We already know it's dead if we are here
p.ethereum.peerMut.Lock() p.ethereum.RemovePeer(p)
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 {

Loading…
Cancel
Save