miner: make starting of CPU agent more reliable (#15148)

This commit is contained in:
Mark 2017-09-19 06:28:15 -05:00 committed by Felix Lange
parent a92d8a2654
commit cb5235eb07

View File

@ -53,7 +53,19 @@ func (self *CpuAgent) Work() chan<- *Work { return self.workCh }
func (self *CpuAgent) SetReturnCh(ch chan<- *Result) { self.returnCh = ch } func (self *CpuAgent) SetReturnCh(ch chan<- *Result) { self.returnCh = ch }
func (self *CpuAgent) Stop() { func (self *CpuAgent) Stop() {
if !atomic.CompareAndSwapInt32(&self.isMining, 1, 0) {
return // agent already stopped
}
self.stop <- struct{}{} self.stop <- struct{}{}
done:
// Empty work channel
for {
select {
case <-self.workCh:
default:
break done
}
}
} }
func (self *CpuAgent) Start() { func (self *CpuAgent) Start() {
@ -85,17 +97,6 @@ out:
break out break out
} }
} }
done:
// Empty work channel
for {
select {
case <-self.workCh:
default:
break done
}
}
atomic.StoreInt32(&self.isMining, 0)
} }
func (self *CpuAgent) mine(work *Work, stop <-chan struct{}) { func (self *CpuAgent) mine(work *Work, stop <-chan struct{}) {