|
@@ -1805,6 +1805,17 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, er
|
|
|
return it.index, err
|
|
return it.index, err
|
|
|
}
|
|
}
|
|
|
// No validation errors for the first block (or chain prefix skipped)
|
|
// No validation errors for the first block (or chain prefix skipped)
|
|
|
|
|
+ var activeState *state.StateDB
|
|
|
|
|
+ defer func() {
|
|
|
|
|
+ // The chain importer is starting and stopping trie prefetchers. If a bad
|
|
|
|
|
+ // block or other error is hit however, an early return may not properly
|
|
|
|
|
+ // terminate the background threads. This defer ensures that we clean up
|
|
|
|
|
+ // and dangling prefetcher, without defering each and holding on live refs.
|
|
|
|
|
+ if activeState != nil {
|
|
|
|
|
+ activeState.StopPrefetcher()
|
|
|
|
|
+ }
|
|
|
|
|
+ }()
|
|
|
|
|
+
|
|
|
for ; block != nil && err == nil || err == ErrKnownBlock; block, err = it.next() {
|
|
for ; block != nil && err == nil || err == ErrKnownBlock; block, err = it.next() {
|
|
|
// If the chain is terminating, stop processing blocks
|
|
// If the chain is terminating, stop processing blocks
|
|
|
if bc.insertStopped() {
|
|
if bc.insertStopped() {
|
|
@@ -1867,7 +1878,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, er
|
|
|
}
|
|
}
|
|
|
// Enable prefetching to pull in trie node paths while processing transactions
|
|
// Enable prefetching to pull in trie node paths while processing transactions
|
|
|
statedb.StartPrefetcher("chain")
|
|
statedb.StartPrefetcher("chain")
|
|
|
- defer statedb.StopPrefetcher() // stopped on write anyway, defer meant to catch early error returns
|
|
|
|
|
|
|
+ activeState = statedb
|
|
|
|
|
|
|
|
// If we have a followup block, run that against the current state to pre-cache
|
|
// If we have a followup block, run that against the current state to pre-cache
|
|
|
// transactions and probabilistically some of the account/storage trie nodes.
|
|
// transactions and probabilistically some of the account/storage trie nodes.
|