|
|
|
@ -1654,18 +1654,17 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, er |
|
|
|
|
// 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.
|
|
|
|
|
var followupInterrupt uint32 |
|
|
|
|
|
|
|
|
|
if !bc.cacheConfig.TrieCleanNoPrefetch { |
|
|
|
|
if followup, err := it.peek(); followup != nil && err == nil { |
|
|
|
|
go func(start time.Time) { |
|
|
|
|
throwaway, _ := state.New(parent.Root, bc.stateCache) |
|
|
|
|
bc.prefetcher.Prefetch(followup, throwaway, bc.vmConfig, &followupInterrupt) |
|
|
|
|
throwaway, _ := state.New(parent.Root, bc.stateCache) |
|
|
|
|
go func(start time.Time, followup *types.Block, throwaway *state.StateDB, interrupt *uint32) { |
|
|
|
|
bc.prefetcher.Prefetch(followup, throwaway, bc.vmConfig, interrupt) |
|
|
|
|
|
|
|
|
|
blockPrefetchExecuteTimer.Update(time.Since(start)) |
|
|
|
|
if atomic.LoadUint32(&followupInterrupt) == 1 { |
|
|
|
|
if atomic.LoadUint32(interrupt) == 1 { |
|
|
|
|
blockPrefetchInterruptMeter.Mark(1) |
|
|
|
|
} |
|
|
|
|
}(time.Now()) |
|
|
|
|
}(time.Now(), followup, throwaway, &followupInterrupt) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// Process block using the parent state as reference point
|
|
|
|
|