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 {
v := value.Value()
if v.CreatorID == userID {
roomCache.Delete(key)
v.close()
roomCache.CompareAndDelete(key, value)
}
return true
})

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

Loading…
Cancel
Save