fix onEvicted

This commit is contained in:
Sina Mahmoodi 2025-04-16 12:49:25 +02:00 committed by lightclient
parent eb4e231434
commit d053edfd74
No known key found for this signature in database
GPG key ID: 657913021EF45A6A
2 changed files with 8 additions and 6 deletions

View file

@ -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])
}

View file

@ -62,13 +62,15 @@ 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)
}
}
})
log.Info("Opened erastore", "datadir", datadir)
return db, nil