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