Commit 90c4493a authored by obscuren's avatar obscuren

eth, core: interupt the chain processing on stop

Added an additional channel which is used to interupt the chain manager
when it's processing blocks.
parent e2c2d8e1
...@@ -101,6 +101,7 @@ type ChainManager struct { ...@@ -101,6 +101,7 @@ type ChainManager struct {
futureBlocks *BlockCache futureBlocks *BlockCache
quit chan struct{} quit chan struct{}
procInterupt chan struct{} // interupt signaler for block processing
wg sync.WaitGroup wg sync.WaitGroup
pow pow.PoW pow pow.PoW
...@@ -113,6 +114,7 @@ func NewChainManager(genesis *types.Block, blockDb, stateDb common.Database, pow ...@@ -113,6 +114,7 @@ func NewChainManager(genesis *types.Block, blockDb, stateDb common.Database, pow
genesisBlock: GenesisBlock(42, stateDb), genesisBlock: GenesisBlock(42, stateDb),
eventMux: mux, eventMux: mux,
quit: make(chan struct{}), quit: make(chan struct{}),
procInterupt: make(chan struct{}),
cache: NewBlockCache(blockCacheLimit), cache: NewBlockCache(blockCacheLimit),
pow: pow, pow: pow,
} }
...@@ -516,6 +518,7 @@ func (self *ChainManager) CalcTotalDiff(block *types.Block) (*big.Int, error) { ...@@ -516,6 +518,7 @@ func (self *ChainManager) CalcTotalDiff(block *types.Block) (*big.Int, error) {
func (bc *ChainManager) Stop() { func (bc *ChainManager) Stop() {
close(bc.quit) close(bc.quit)
close(bc.procInterupt)
bc.wg.Wait() bc.wg.Wait()
...@@ -568,7 +571,13 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { ...@@ -568,7 +571,13 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
defer close(nonceQuit) defer close(nonceQuit)
txcount := 0 txcount := 0
done:
for i, block := range chain { for i, block := range chain {
select {
case <-self.procInterupt:
glog.V(logger.Debug).Infoln("Premature abort during chain processing")
break done
default:
bstart := time.Now() bstart := time.Now()
// Wait for block i's nonce to be verified before processing // Wait for block i's nonce to be verified before processing
// its state transition. // its state transition.
...@@ -682,6 +691,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { ...@@ -682,6 +691,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
stats.processed++ stats.processed++
} }
}
if (stats.queued > 0 || stats.processed > 0 || stats.ignored > 0) && bool(glog.V(logger.Info)) { if (stats.queued > 0 || stats.processed > 0 || stats.ignored > 0) && bool(glog.V(logger.Info)) {
tend := time.Since(tstart) tend := time.Since(tstart)
......
...@@ -527,8 +527,8 @@ func (self *Ethereum) AddPeer(nodeURL string) error { ...@@ -527,8 +527,8 @@ func (self *Ethereum) AddPeer(nodeURL string) error {
func (s *Ethereum) Stop() { func (s *Ethereum) Stop() {
s.net.Stop() s.net.Stop()
s.protocolManager.Stop()
s.chainManager.Stop() s.chainManager.Stop()
s.protocolManager.Stop()
s.txPool.Stop() s.txPool.Stop()
s.eventMux.Stop() s.eventMux.Stop()
if s.whisper != nil { if s.whisper != nil {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment