mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
core/state, tests: fix memory leak via fastcache
This commit is contained in:
parent
cd29535672
commit
07bf799be5
4 changed files with 22 additions and 0 deletions
|
|
@ -989,6 +989,7 @@ func (bc *BlockChain) Stop() {
|
|||
if snapBase, err = bc.snaps.Journal(bc.CurrentBlock().Root); err != nil {
|
||||
log.Error("Failed to journal state snapshot", "err", err)
|
||||
}
|
||||
bc.snaps.Release()
|
||||
}
|
||||
if bc.triedb.Scheme() == rawdb.PathScheme {
|
||||
// Ensure that the in-memory trie nodes are journaled to disk properly.
|
||||
|
|
|
|||
|
|
@ -45,6 +45,17 @@ type diskLayer struct {
|
|||
lock sync.RWMutex
|
||||
}
|
||||
|
||||
// Release releases underlying resources; specifically the fastcache requires
|
||||
// Reset() in order to not leak memory.
|
||||
// OBS: It does not invoke Close on the diskdb
|
||||
func (dl *diskLayer) Release() error {
|
||||
if dl.cache != nil {
|
||||
dl.cache.Reset()
|
||||
dl.cache = nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Root returns root hash for which this snapshot was made.
|
||||
func (dl *diskLayer) Root() common.Hash {
|
||||
return dl.root
|
||||
|
|
|
|||
|
|
@ -656,6 +656,13 @@ func diffToDisk(bottom *diffLayer) *diskLayer {
|
|||
return res
|
||||
}
|
||||
|
||||
// Release releases resources
|
||||
func (t *Tree) Release() {
|
||||
if dl := t.disklayer(); dl != nil {
|
||||
dl.Release()
|
||||
}
|
||||
}
|
||||
|
||||
// Journal commits an entire diff hierarchy to disk into a single journal entry.
|
||||
// This is meant to be used during shutdown to persist the snapshot without
|
||||
// flattening everything down (bad for reorgs).
|
||||
|
|
|
|||
|
|
@ -200,6 +200,9 @@ func (t *StateTest) Run(subtest StateSubtest, vmconfig vm.Config, snapshotter bo
|
|||
if triedb != nil {
|
||||
triedb.Close()
|
||||
}
|
||||
if snaps != nil {
|
||||
snaps.Release()
|
||||
}
|
||||
}()
|
||||
checkedErr := t.checkError(subtest, err)
|
||||
if checkedErr != nil {
|
||||
|
|
|
|||
Loading…
Reference in a new issue