From a8d160f9b17f54c04e68c0e1995b8b2d570186f4 Mon Sep 17 00:00:00 2001 From: quoing Date: Tue, 21 Jun 2022 09:39:06 +0200 Subject: [PATCH] Fix concurrent map writes for FeedIcon cache --- src/server/routes.go | 2 ++ src/server/server.go | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/server/routes.go b/src/server/routes.go index c2ba861..e80509a 100644 --- a/src/server/routes.go +++ b/src/server/routes.go @@ -177,7 +177,9 @@ func (s *Server) handleFeedIcon(c *router.Context) { bytes: *(*feed).Icon, etag: etag, } + s.cache_mutex.Lock() s.cache[cachekey] = cachedat + s.cache_mutex.Unlock() } icon := cachedat.(feedicon) diff --git a/src/server/server.go b/src/server/server.go index 7aeebac..ca1d7a7 100644 --- a/src/server/server.go +++ b/src/server/server.go @@ -3,6 +3,7 @@ package server import ( "log" "net/http" + "sync" "github.com/nkanaev/yarr/src/storage" "github.com/nkanaev/yarr/src/worker" @@ -13,6 +14,7 @@ type Server struct { db *storage.Storage worker *worker.Worker cache map[string]interface{} + cache_mutex *sync.Mutex BasePath string @@ -30,6 +32,7 @@ func NewServer(db *storage.Storage, addr string) *Server { Addr: addr, worker: worker.NewWorker(db), cache: make(map[string]interface{}), + cache_mutex: &sync.Mutex{}, } }