diff --git a/common/lru/basiclru.go b/common/lru/basiclru.go index fc178e804d..2fa26bdba3 100644 --- a/common/lru/basiclru.go +++ b/common/lru/basiclru.go @@ -60,12 +60,12 @@ func (c *BasicLRU[K, V]) Add(key K, value V) (evicted bool) { var elem *listElem[K] if c.Len() >= c.cap { elem = c.list.removeLast() - delete(c.items, elem.v) - evicted = true if c.onEvicted != nil { v := c.items[elem.v] c.onEvicted(elem.v, v.value) } + delete(c.items, elem.v) + evicted = true } else { elem = new(listElem[K]) } diff --git a/core/rawdb/eradb/eradb.go b/core/rawdb/eradb/eradb.go index 28d245451b..655712da99 100644 --- a/core/rawdb/eradb/eradb.go +++ b/core/rawdb/eradb/eradb.go @@ -62,12 +62,14 @@ func New(datadir string) (*EraDatabase, error) { } db := &EraDatabase{datadir: datadir, cache: lru.NewCache[uint64, *era.Era](openFileLimit)} db.cache.OnEvicted(func(key uint64, value *era.Era) { + if value == nil { + log.Warn("Era1 cache evicted nil value", "epoch", key) + return + } // Close the era1 file when it is evicted from the cache // to avoid leaks. - if value != nil { - if err := value.Close(); err != nil { - log.Warn("Error closing era1 file", "epoch", key, "err", err) - } + if err := value.Close(); err != nil { + log.Warn("Error closing era1 file", "epoch", key, "err", err) } }) log.Info("Opened erastore", "datadir", datadir)