Unverified Commit df219e23 authored by Marius van der Wijden's avatar Marius van der Wijden Committed by GitHub

miner: fix regression, add test for starting while download (#21547)

Fixes a regression introduced in #21536
parent 7cf56d6f
......@@ -88,6 +88,7 @@ func (miner *Miner) update() {
defer events.Unsubscribe()
shouldStart := false
canStart := true
for {
select {
case ev := <-events.Chan():
......@@ -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()
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment