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{}) | ||||
| 			} | ||||
| 			// Dereference all past tries we ourselves are done working with
 | ||||
| 			database.TrieDB().Dereference(proot) | ||||
| 			if proot != (common.Hash{}) { | ||||
| 				database.TrieDB().Dereference(proot) | ||||
| 			} | ||||
| 			proot = root | ||||
| 
 | ||||
| 			// 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 | ||||
| 		} | ||||
| 		database.TrieDB().Reference(root, common.Hash{}) | ||||
| 		database.TrieDB().Dereference(proot) | ||||
| 		if proot != (common.Hash{}) { | ||||
| 			database.TrieDB().Dereference(proot) | ||||
| 		} | ||||
| 		proot = root | ||||
| 	} | ||||
| 	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.
 | ||||
| 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() | ||||
| 	defer db.lock.Unlock() | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user