Fix: use comp and del

pull/24/head
zijiren233 2 years ago
parent 9e53c16443
commit d19d8bd5c3

@ -82,8 +82,7 @@ func DeleteUserByID(userID uint) error {
roomCache.Range(func(key uint, value *synccache.Entry[*Room]) bool { roomCache.Range(func(key uint, value *synccache.Entry[*Room]) bool {
v := value.Value() v := value.Value()
if v.CreatorID == userID { if v.CreatorID == userID {
roomCache.Delete(key) roomCache.CompareAndDelete(key, value)
v.close()
} }
return true return true
}) })

@ -43,9 +43,9 @@ func (sc *SyncCache[K, V]) Releases() {
func (sc *SyncCache[K, V]) trim() { func (sc *SyncCache[K, V]) trim() {
sc.cache.Range(func(key K, value *Entry[V]) bool { sc.cache.Range(func(key K, value *Entry[V]) bool {
if value.IsExpired() { if value.IsExpired() {
e, loaded := sc.cache.LoadAndDelete(key) sc.cache.CompareAndDelete(key, value)
if loaded && sc.deletedCallback != nil { if sc.deletedCallback != nil {
sc.deletedCallback(e.value) sc.deletedCallback(value.value)
} }
} }
return true return true
@ -100,6 +100,14 @@ func (sc *SyncCache[K, V]) LoadAndDelete(key K) (value *Entry[V], loaded bool) {
return return
} }
func (sc *SyncCache[K, V]) CompareAndDelete(key K, oldEntry *Entry[V]) (success bool) {
b := sc.cache.CompareAndDelete(key, oldEntry)
if b && sc.deletedCallback != nil {
sc.deletedCallback(oldEntry.value)
}
return b
}
func (sc *SyncCache[K, V]) Clear() { func (sc *SyncCache[K, V]) Clear() {
sc.cache.Clear() sc.cache.Clear()
} }

Loading…
Cancel
Save