Merge pull request #2949 from elliots/fix/#2948
miner: Prevent attempts to close nil quit channel in agent (fixes #2948)
This commit is contained in:
commit
2c6be49d20
@ -43,8 +43,10 @@ type CpuAgent struct {
|
|||||||
|
|
||||||
func NewCpuAgent(index int, pow pow.PoW) *CpuAgent {
|
func NewCpuAgent(index int, pow pow.PoW) *CpuAgent {
|
||||||
miner := &CpuAgent{
|
miner := &CpuAgent{
|
||||||
pow: pow,
|
pow: pow,
|
||||||
index: index,
|
index: index,
|
||||||
|
quit: make(chan struct{}),
|
||||||
|
workCh: make(chan *Work, 1),
|
||||||
}
|
}
|
||||||
|
|
||||||
return miner
|
return miner
|
||||||
@ -55,25 +57,15 @@ func (self *CpuAgent) Pow() pow.PoW { return self.pow }
|
|||||||
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() {
|
||||||
self.mu.Lock()
|
|
||||||
defer self.mu.Unlock()
|
|
||||||
|
|
||||||
close(self.quit)
|
close(self.quit)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *CpuAgent) Start() {
|
func (self *CpuAgent) Start() {
|
||||||
self.mu.Lock()
|
|
||||||
defer self.mu.Unlock()
|
|
||||||
|
|
||||||
if !atomic.CompareAndSwapInt32(&self.isMining, 0, 1) {
|
if !atomic.CompareAndSwapInt32(&self.isMining, 0, 1) {
|
||||||
return // agent already started
|
return // agent already started
|
||||||
}
|
}
|
||||||
|
|
||||||
self.quit = make(chan struct{})
|
|
||||||
// creating current op ch makes sure we're not closing a nil ch
|
|
||||||
// later on
|
|
||||||
self.workCh = make(chan *Work, 1)
|
|
||||||
|
|
||||||
go self.update()
|
go self.update()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user