eth: fix crash in ethclient tests

This commit is contained in:
Felix Lange 2019-07-08 15:33:48 +02:00
parent 84fac80fe4
commit a9b863ea51
2 changed files with 14 additions and 12 deletions

View file

@ -522,7 +522,7 @@ func (s *Ethereum) Protocols() []p2p.Protocol {
// Start implements node.Service, starting all internal goroutines needed by the // Start implements node.Service, starting all internal goroutines needed by the
// Ethereum protocol implementation. // Ethereum protocol implementation.
func (s *Ethereum) Start(srvr *p2p.Server) error { func (s *Ethereum) Start(srvr *p2p.Server) error {
go s.enrUpdateLoop(srvr.LocalNode()) s.startEthEntryUpdate(srvr.LocalNode())
// Start the bloom bits servicing goroutines // Start the bloom bits servicing goroutines
s.startBloomHandlers(params.BloomBitsBlocks) s.startBloomHandlers(params.BloomBitsBlocks)

View file

@ -37,21 +37,23 @@ func (e ethEntry) ENRKey() string {
return "eth" return "eth"
} }
func (eth *Ethereum) enrUpdateLoop(ln *enode.LocalNode) { func (eth *Ethereum) startEthEntryUpdate(ln *enode.LocalNode) {
var newHead = make(chan core.ChainHeadEvent, 10) var newHead = make(chan core.ChainHeadEvent, 10)
sub := eth.blockchain.SubscribeChainHeadEvent(newHead) sub := eth.blockchain.SubscribeChainHeadEvent(newHead)
defer sub.Unsubscribe()
for { go func() {
select { defer sub.Unsubscribe()
case <-newHead: for {
ln.Set(eth.currentEthEntry()) select {
case <-sub.Err(): case <-newHead:
// Would be nice to sync with eth.Stop, but there is no ln.Set(eth.currentEthEntry())
// good way to do that. case <-sub.Err():
return // Would be nice to sync with eth.Stop, but there is no
// good way to do that.
return
}
} }
} }()
} }
func (eth *Ethereum) currentEthEntry() *ethEntry { func (eth *Ethereum) currentEthEntry() *ethEntry {