Compare commits

...

2 commits

Author SHA1 Message Date
2341b7e473
finalize v0.1.1
All checks were successful
/ linting (push) Successful in 49s
/ tests (push) Successful in 34s
2025-01-18 01:38:53 +01:00
35044ad38a
fix: deadlock in tests 2025-01-18 01:37:41 +01:00
2 changed files with 8 additions and 5 deletions

View file

@ -2,6 +2,10 @@
## Unreleased
## v0.1.1 (2025-01-18)
* Fix a deadlock in tests
## v0.1.0 (2025-01-18)
* First version

View file

@ -23,14 +23,13 @@ func (e entry[V]) isExpired() bool {
// Cache is an in-memory key-value store.
type Cache[K comparable, V any] struct {
data map[K]entry[V]
mu *sync.RWMutex
mu sync.RWMutex
}
// New instantiate a new cache.
func New[K comparable, V any]() *Cache[K, V] {
return &Cache[K, V]{
data: make(map[K]entry[V]),
mu: &sync.RWMutex{},
}
}
@ -47,9 +46,6 @@ func (c *Cache[K, V]) Put(key K, val V) {
//
// A 0 ttl value disables the expiration of the value.
func (c *Cache[K, V]) PutTTL(key K, val V, ttl time.Duration) {
c.mu.Lock()
defer c.mu.Unlock()
if ttl == 0 {
c.Put(key, val)
@ -58,6 +54,9 @@ func (c *Cache[K, V]) PutTTL(key K, val V, ttl time.Duration) {
exp := time.Now().Add(ttl)
c.mu.Lock()
defer c.mu.Unlock()
c.data[key] = entry[V]{&exp, val}
}