diff --git a/CHANGELOG.md b/CHANGELOG.md index a4f9a15..8981296 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,6 @@ ## Unreleased -## v0.1.1 (2025-01-18) - -* Fix a deadlock in tests - ## v0.1.0 (2025-01-18) * First version diff --git a/LICENSE b/LICENSE index 576c9bd..1339f84 100644 --- a/LICENSE +++ b/LICENSE @@ -1,12 +1,10 @@ -MIT License - -Copyright (c) 2021-2025 Bruno Carlin +MIT License Copyright (c) 2021 Bruno Carlin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell c +pies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all diff --git a/cache.go b/cache.go index 7c068f7..b23880e 100644 --- a/cache.go +++ b/cache.go @@ -23,13 +23,14 @@ 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{}, } } @@ -46,6 +47,9 @@ 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) @@ -54,9 +58,6 @@ 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} }