diff --git a/eth/backend.go b/eth/backend.go index 39b1d8e6bc..bf2ac1d5ed 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -405,7 +405,7 @@ func (s *Ethereum) Start() error { s.handler.Start(s.p2pServer.MaxPeers) // Start the connection manager - s.connman.Start(s.p2pServer) + s.connman.Start(s.p2pServer, s.Synced) // start log indexer s.filterMaps.Start() diff --git a/eth/connmanager.go b/eth/connmanager.go index b4324b9b23..4d04ec8e6b 100644 --- a/eth/connmanager.go +++ b/eth/connmanager.go @@ -49,6 +49,7 @@ type connManager struct { connmanConfig srv *p2p.Server peersFunc getPeersFunc + syncFunc getSyncFunc // the peerDrop timer introduces churn if we are close to limit capacity peerDropTimer *mclock.Alarm @@ -62,6 +63,9 @@ type connManager struct { // callback type to get the list of connected peers. type getPeersFunc func() []*p2p.Peer +// callback type to get sync status. +type getSyncFunc func() bool + type connmanConfig struct { maxDialPeers int // maximum number of dialed peers log log.Logger @@ -97,10 +101,11 @@ func newConnManager(config *connmanConfig) *connManager { return cm } -func (cm *connManager) Start(srv *p2p.Server) { +func (cm *connManager) Start(srv *p2p.Server, syncFunc getSyncFunc) { cm.wg.Add(1) cm.srv = srv cm.peersFunc = srv.Peers + cm.syncFunc = syncFunc cm.sub = srv.SubscribeEvents(cm.peerEventCh) go cm.loop() }