Skip to content

Commit a2a90d3

Browse files
authored
Fix pipecommit about activeState (#1002)
* get copy of prefetcher before use to avoid been modified between access and not-nil condition
1 parent 71f0caa commit a2a90d3

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

core/state/state_object.go

+10-6
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,11 @@ func (s *StateObject) getTrie(db Database) Trie {
169169
if s.trie == nil {
170170
// Try fetching from prefetcher first
171171
// We don't prefetch empty tries
172-
if s.data.Root != emptyRoot && s.db.prefetcher != nil {
172+
prefetcher := s.db.prefetcher
173+
if s.data.Root != emptyRoot && prefetcher != nil {
173174
// When the miner is creating the pending state, there is no
174175
// prefetcher
175-
s.trie = s.db.prefetcher.trie(s.data.Root)
176+
s.trie = prefetcher.trie(s.data.Root)
176177
}
177178
if s.trie == nil {
178179
var err error
@@ -375,8 +376,9 @@ func (s *StateObject) finalise(prefetch bool) {
375376
}
376377
}
377378

378-
if s.db.prefetcher != nil && prefetch && len(slotsToPrefetch) > 0 && s.data.Root != emptyRoot && s.data.Root != dummyRoot {
379-
s.db.prefetcher.prefetch(s.data.Root, slotsToPrefetch, s.addrHash)
379+
prefetcher := s.db.prefetcher
380+
if prefetcher != nil && prefetch && len(slotsToPrefetch) > 0 && s.data.Root != emptyRoot && s.data.Root != dummyRoot {
381+
prefetcher.prefetch(s.data.Root, slotsToPrefetch, s.addrHash)
380382
}
381383
if len(s.dirtyStorage) > 0 {
382384
s.dirtyStorage = make(Storage)
@@ -450,9 +452,11 @@ func (s *StateObject) updateTrie(db Database) Trie {
450452
}
451453
wg.Wait()
452454

453-
if s.db.prefetcher != nil {
454-
s.db.prefetcher.used(s.data.Root, usedStorage)
455+
prefetcher := s.db.prefetcher
456+
if prefetcher != nil {
457+
prefetcher.used(s.data.Root, usedStorage)
455458
}
459+
456460
if len(s.pendingStorage) > 0 {
457461
s.pendingStorage = make(Storage)
458462
}

core/state/statedb.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -857,8 +857,9 @@ func (s *StateDB) Copy() *StateDB {
857857
// If there's a prefetcher running, make an inactive copy of it that can
858858
// only access data but does not actively preload (since the user will not
859859
// know that they need to explicitly terminate an active copy).
860-
if s.prefetcher != nil {
861-
state.prefetcher = s.prefetcher.copy()
860+
prefetcher := s.prefetcher
861+
if prefetcher != nil {
862+
state.prefetcher = prefetcher.copy()
862863
}
863864
if s.snaps != nil {
864865
// In order for the miner to be able to use and make additions
@@ -970,8 +971,9 @@ func (s *StateDB) Finalise(deleteEmptyObjects bool) {
970971
addressesToPrefetch = append(addressesToPrefetch, common.CopyBytes(addr[:])) // Copy needed for closure
971972
}
972973
}
973-
if s.prefetcher != nil && len(addressesToPrefetch) > 0 {
974-
s.prefetcher.prefetch(s.originalRoot, addressesToPrefetch, emptyAddr)
974+
prefetcher := s.prefetcher
975+
if prefetcher != nil && len(addressesToPrefetch) > 0 {
976+
prefetcher.prefetch(s.originalRoot, addressesToPrefetch, emptyAddr)
975977
}
976978
// Invalidate journal because reverting across transactions is not allowed.
977979
s.clearJournalAndRefund()

0 commit comments

Comments
 (0)