提交 cc6c5846 编写于 作者: J Jeffrey Wilcke

Merge pull request #1568 from obscuren/issue-1559

core: added a running flag to prevent panics in the chainmanager
...@@ -76,7 +76,8 @@ type ChainManager struct { ...@@ -76,7 +76,8 @@ type ChainManager struct {
cache *lru.Cache // cache is the LRU caching cache *lru.Cache // cache is the LRU caching
futureBlocks *lru.Cache // future blocks are blocks added for later processing futureBlocks *lru.Cache // future blocks are blocks added for later processing
quit chan struct{} quit chan struct{}
running int32 // running must be called automically
// procInterrupt must be atomically called // procInterrupt must be atomically called
procInterrupt int32 // interrupt signaler for block processing procInterrupt int32 // interrupt signaler for block processing
wg sync.WaitGroup wg sync.WaitGroup
...@@ -451,6 +452,9 @@ func (bc *ChainManager) setTotalDifficulty(td *big.Int) { ...@@ -451,6 +452,9 @@ func (bc *ChainManager) setTotalDifficulty(td *big.Int) {
} }
func (bc *ChainManager) Stop() { func (bc *ChainManager) Stop() {
if !atomic.CompareAndSwapInt32(&bc.running, 0, 1) {
return
}
close(bc.quit) close(bc.quit)
atomic.StoreInt32(&bc.procInterrupt, 1) atomic.StoreInt32(&bc.procInterrupt, 1)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册