forked from cerc-io/plugeth
miner: fix regression, add test for starting while download (#21547)
Fixes a regression introduced in #21536
This commit is contained in:
parent
7cf56d6f06
commit
df219e23df
@ -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:
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user