From 09fcc6dcb83a3165bf46cbb679693dc9729b07b6 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Fri, 28 Jul 2023 17:10:40 -0700 Subject: [PATCH] clear in-memory image cache on server logout --- backend/imagecache.go | 7 +++++++ backend/imagemanager.go | 16 ++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/backend/imagecache.go b/backend/imagecache.go index 10257fd..8de7a68 100644 --- a/backend/imagecache.go +++ b/backend/imagecache.go @@ -128,6 +128,13 @@ func (i *ImageCache) GetWithNewTTL(key string, newTtl time.Duration) (image.Imag return nil, ErrNotFound } +func (i *ImageCache) Clear() { + i.mu.Lock() + defer i.mu.Unlock() + + i.cache = make(map[string]CacheItem) +} + // must be called when rwmutex is already acquired for writing func (i *ImageCache) evictOne() { now := time.Now().Unix() diff --git a/backend/imagemanager.go b/backend/imagemanager.go index d65c07e..24268ba 100644 --- a/backend/imagemanager.go +++ b/backend/imagemanager.go @@ -49,7 +49,11 @@ func NewImageManager(ctx context.Context, s *ServerManager, baseCacheDir string) DefaultTTL: 1 * time.Minute, }, } - i.thumbnailCache.OnEvictTaskRan = i.clearExpiredFullSizeCover + s.OnLogout(func() { + i.thumbnailCache.Clear() + i.clearFullSizeCover() + }) + i.thumbnailCache.OnEvictTaskRan = i.clearFullSizeCoverIfExpired i.thumbnailCache.Init(ctx, 2*time.Minute) return i } @@ -223,10 +227,14 @@ func (i *ImageManager) loadLocalImage(path string) (image.Image, bool) { return nil, false } -func (i *ImageManager) clearExpiredFullSizeCover() { +func (i *ImageManager) clearFullSizeCoverIfExpired() { now := time.Now().UnixMilli() if now-i.cachedFullSizeCoverAccessedAt > fullSizeCoverExpires.Milliseconds() { - i.cachedFullSizeCoverID = "" - i.cachedFullSizeCover = nil + i.clearFullSizeCover() } } + +func (i *ImageManager) clearFullSizeCover() { + i.cachedFullSizeCoverID = "" + i.cachedFullSizeCover = nil +}