forked from cerc-io/plugeth
Merge pull request #17357 from karalabe/tracer-trie-deref-bug
eth, trie: fix tracer GC which accidentally pruned the metaroot
This commit is contained in:
commit
beade042d1
@ -297,7 +297,9 @@ func (api *PrivateDebugAPI) traceChain(ctx context.Context, start, end *types.Bl
|
|||||||
database.TrieDB().Reference(root, common.Hash{})
|
database.TrieDB().Reference(root, common.Hash{})
|
||||||
}
|
}
|
||||||
// Dereference all past tries we ourselves are done working with
|
// Dereference all past tries we ourselves are done working with
|
||||||
database.TrieDB().Dereference(proot)
|
if proot != (common.Hash{}) {
|
||||||
|
database.TrieDB().Dereference(proot)
|
||||||
|
}
|
||||||
proot = root
|
proot = root
|
||||||
|
|
||||||
// TODO(karalabe): Do we need the preimages? Won't they accumulate too much?
|
// TODO(karalabe): Do we need the preimages? Won't they accumulate too much?
|
||||||
@ -526,7 +528,9 @@ func (api *PrivateDebugAPI) computeStateDB(block *types.Block, reexec uint64) (*
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
database.TrieDB().Reference(root, common.Hash{})
|
database.TrieDB().Reference(root, common.Hash{})
|
||||||
database.TrieDB().Dereference(proot)
|
if proot != (common.Hash{}) {
|
||||||
|
database.TrieDB().Dereference(proot)
|
||||||
|
}
|
||||||
proot = root
|
proot = root
|
||||||
}
|
}
|
||||||
nodes, imgs := database.TrieDB().Size()
|
nodes, imgs := database.TrieDB().Size()
|
||||||
|
@ -431,6 +431,11 @@ func (db *Database) reference(child common.Hash, parent common.Hash) {
|
|||||||
|
|
||||||
// Dereference removes an existing reference from a root node.
|
// Dereference removes an existing reference from a root node.
|
||||||
func (db *Database) Dereference(root common.Hash) {
|
func (db *Database) Dereference(root common.Hash) {
|
||||||
|
// Sanity check to ensure that the meta-root is not removed
|
||||||
|
if root == (common.Hash{}) {
|
||||||
|
log.Error("Attempted to dereference the trie cache meta root")
|
||||||
|
return
|
||||||
|
}
|
||||||
db.lock.Lock()
|
db.lock.Lock()
|
||||||
defer db.lock.Unlock()
|
defer db.lock.Unlock()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user