From 14316cfd31043470a3edfb9bafb5c02af2394574 Mon Sep 17 00:00:00 2001 From: TwinProduction Date: Mon, 12 Jul 2021 22:53:35 -0400 Subject: [PATCH] Fix potential concurrent access issue --- storage/store/memory/memory.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/storage/store/memory/memory.go b/storage/store/memory/memory.go index d859fc3a..070569ad 100644 --- a/storage/store/memory/memory.go +++ b/storage/store/memory/memory.go @@ -2,6 +2,7 @@ package memory import ( "encoding/gob" + "sync" "github.com/TwinProduction/gatus/core" "github.com/TwinProduction/gatus/util" @@ -17,6 +18,7 @@ func init() { // Store that leverages gocache type Store struct { + sync.RWMutex file string cache *gocache.Cache } @@ -64,12 +66,14 @@ func (s *Store) GetServiceStatusByKey(key string) *core.ServiceStatus { // Insert adds the observed result for the specified service into the store func (s *Store) Insert(service *core.Service, result *core.Result) { key := service.Key() + s.Lock() serviceStatus, exists := s.cache.Get(key) if !exists { serviceStatus = core.NewServiceStatus(service) } serviceStatus.(*core.ServiceStatus).AddResult(result) s.cache.Set(key, serviceStatus) + s.Unlock() } // DeleteAllServiceStatusesNotInKeys removes all ServiceStatus that are not within the keys provided