diff options
author | Bas van Kervel <bas@ethdev.com> | 2015-09-08 17:27:55 +0800 |
---|---|---|
committer | Bas van Kervel <bas@ethdev.com> | 2015-09-08 17:27:55 +0800 |
commit | 618065895b9ec3170eeb954bd12f8de58255e5c6 (patch) | |
tree | 2cf94d0c09ac814c0b611de207a80f5b67eb7a27 /miner/agent.go | |
parent | e2d7c1a52303ebdd8c2956badad5e600bf93ff33 (diff) | |
download | go-tangerine-618065895b9ec3170eeb954bd12f8de58255e5c6.tar.gz go-tangerine-618065895b9ec3170eeb954bd12f8de58255e5c6.tar.zst go-tangerine-618065895b9ec3170eeb954bd12f8de58255e5c6.zip |
agent/miner Prevent the CpuAgent to be started multiple times
Diffstat (limited to 'miner/agent.go')
-rw-r--r-- | miner/agent.go | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/miner/agent.go b/miner/agent.go index 2f8d9fee4..c3ea91b50 100644 --- a/miner/agent.go +++ b/miner/agent.go @@ -23,6 +23,7 @@ import ( "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/pow" + "sync/atomic" ) type CpuAgent struct { @@ -35,6 +36,8 @@ type CpuAgent struct { index int pow pow.PoW + + isMining int32 // isMining indicates whether the agent is currently mining } func NewCpuAgent(index int, pow pow.PoW) *CpuAgent { @@ -58,8 +61,12 @@ func (self *CpuAgent) Stop() { } func (self *CpuAgent) Start() { - self.mu.Lock() defer self.mu.Unlock() + self.mu.Lock() + + if atomic.LoadInt32(&self.isMining) == 1 { + return // agent already started + } self.quit = make(chan struct{}) // creating current op ch makes sure we're not closing a nil ch @@ -67,6 +74,8 @@ func (self *CpuAgent) Start() { self.workCh = make(chan *Work, 1) go self.update() + + atomic.StoreInt32(&self.isMining, 1) } func (self *CpuAgent) update() { @@ -99,10 +108,11 @@ done: case <-self.workCh: default: close(self.workCh) - break done } } + + atomic.StoreInt32(&self.isMining, 0) } func (self *CpuAgent) mine(work *Work, stop <-chan struct{}) { |