core/state/snapshot: fix data race in diff layer (#22540)
This commit is contained in:
parent
73ed68988f
commit
c79fc209cd
@ -296,13 +296,17 @@ func (dl *diffLayer) AccountRLP(hash common.Hash) ([]byte, error) {
|
||||
if !hit {
|
||||
hit = dl.diffed.Contains(destructBloomHasher(hash))
|
||||
}
|
||||
var origin *diskLayer
|
||||
if !hit {
|
||||
origin = dl.origin // extract origin while holding the lock
|
||||
}
|
||||
dl.lock.RUnlock()
|
||||
|
||||
// If the bloom filter misses, don't even bother with traversing the memory
|
||||
// diff layers, reach straight into the bottom persistent disk layer
|
||||
if !hit {
|
||||
if origin != nil {
|
||||
snapshotBloomAccountMissMeter.Mark(1)
|
||||
return dl.origin.AccountRLP(hash)
|
||||
return origin.AccountRLP(hash)
|
||||
}
|
||||
// The bloom filter hit, start poking in the internal maps
|
||||
return dl.accountRLP(hash, 0)
|
||||
@ -358,13 +362,17 @@ func (dl *diffLayer) Storage(accountHash, storageHash common.Hash) ([]byte, erro
|
||||
if !hit {
|
||||
hit = dl.diffed.Contains(destructBloomHasher(accountHash))
|
||||
}
|
||||
var origin *diskLayer
|
||||
if !hit {
|
||||
origin = dl.origin // extract origin while holding the lock
|
||||
}
|
||||
dl.lock.RUnlock()
|
||||
|
||||
// If the bloom filter misses, don't even bother with traversing the memory
|
||||
// diff layers, reach straight into the bottom persistent disk layer
|
||||
if !hit {
|
||||
if origin != nil {
|
||||
snapshotBloomStorageMissMeter.Mark(1)
|
||||
return dl.origin.Storage(accountHash, storageHash)
|
||||
return origin.Storage(accountHash, storageHash)
|
||||
}
|
||||
// The bloom filter hit, start poking in the internal maps
|
||||
return dl.storage(accountHash, storageHash, 0)
|
||||
|
Loading…
Reference in New Issue
Block a user