Skip to content

Commit

Permalink
miner: fix regression, add test for starting while download (ethereum…
Browse files Browse the repository at this point in the history
…#21547)

Fixes a regression introduced in ethereum#21536
  • Loading branch information
MariusVanDerWijden authored Sep 11, 2020
1 parent 7cf56d6 commit df219e2
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 2 deletions.
11 changes: 9 additions & 2 deletions miner/miner.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ func (miner *Miner) update() {
defer events.Unsubscribe()

shouldStart := false
canStart := true
for {
select {
case ev := <-events.Chan():
Expand All @@ -98,21 +99,27 @@ 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:
shouldStart = false
miner.worker.stop()
case <-miner.exitCh:
miner.worker.close()
Expand Down
13 changes: 13 additions & 0 deletions miner/miner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit df219e2

Please sign in to comment.