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
// Ethereum protocol implementation.
func (s *Ethereum) Start(srvr *p2p.Server) error {
go s.enrUpdateLoop(srvr.LocalNode())
s.startEthEntryUpdate(srvr.LocalNode())
// Start the bloom bits servicing goroutines
s.startBloomHandlers(params.BloomBitsBlocks)

View file

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