From 1e38bde93c0c1ecda17b4feca7d24910e746b74c Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Fri, 11 Sep 2020 11:25:13 +0200 Subject: [PATCH 1/2] miner: fix regression, add test for starting while download --- miner/miner.go | 10 ++++++++-- miner/miner_test.go | 13 +++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/miner/miner.go b/miner/miner.go index ec5b4cc085ce..9fa0bee63f58 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -88,6 +88,7 @@ func (miner *Miner) update() { defer events.Unsubscribe() shouldStart := false + canStart := true for { select { case ev := <-events.Chan(): @@ -98,20 +99,25 @@ func (miner *Miner) update() { case downloader.StartEvent: wasMining := miner.Mining() miner.worker.stop() + canStart = false if wasMining { // Resume mining after sync was finished shouldStart = true log.Info("Mining aborted due to sync") } case downloader.DoneEvent, downloader.FailedEvent: + canStart = true if shouldStart { miner.SetEtherbase(miner.coinbase) miner.worker.start() } } case addr := <-miner.startCh: - miner.SetEtherbase(addr) - miner.worker.start() + if canStart { + miner.SetEtherbase(addr) + miner.worker.start() + } + shouldStart = true case <-miner.stopCh: miner.worker.stop() case <-miner.exitCh: diff --git a/miner/miner_test.go b/miner/miner_test.go index 447892b198c2..2ed03a2397a9 100644 --- a/miner/miner_test.go +++ b/miner/miner_test.go @@ -97,6 +97,19 @@ func TestMiner(t *testing.T) { waitForMiningState(t, miner, true) } +func TestStartWhileDownload(t *testing.T) { + miner, mux := createMiner(t) + waitForMiningState(t, miner, false) + miner.Start(common.HexToAddress("0x12345")) + waitForMiningState(t, miner, true) + // Stop the downloader and wait for the update loop to run + mux.Post(downloader.StartEvent{}) + waitForMiningState(t, miner, false) + // Starting the miner after the downloader should not work + miner.Start(common.HexToAddress("0x12345")) + waitForMiningState(t, miner, false) +} + func TestStartStopMiner(t *testing.T) { miner, _ := createMiner(t) waitForMiningState(t, miner, false) From ce70ee4d79e282b028f8532a2f6718d293085ec8 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Fri, 11 Sep 2020 12:44:44 +0200 Subject: [PATCH 2/2] miner: fix regression --- miner/miner.go | 1 + 1 file changed, 1 insertion(+) diff --git a/miner/miner.go b/miner/miner.go index 9fa0bee63f58..8cbd70b424b5 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -119,6 +119,7 @@ func (miner *Miner) update() { } shouldStart = true case <-miner.stopCh: + shouldStart = false miner.worker.stop() case <-miner.exitCh: miner.worker.close()