From d6d0c18cad6426a0562d19b2b0c66a7c2bb4e2c5 Mon Sep 17 00:00:00 2001 From: Ben Morrison Date: Mon, 27 May 2019 19:01:04 -0400 Subject: fixed race condition --- cache.go | 14 ++++++++++++-- cache_test.go | 20 +++++++++++--------- init_test.go | 10 +++++++--- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/cache.go b/cache.go index 4cb1855..e0fedb1 100644 --- a/cache.go +++ b/cache.go @@ -14,11 +14,19 @@ import ( ) func checkCacheTime() bool { - return time.Since(confObj.LastCache) > confObj.CacheInterval + confObj.Mu.RLock() + answer := time.Since(confObj.LastCache) > confObj.CacheInterval + confObj.Mu.RUnlock() + + return answer } func checkDBtime() bool { - return time.Since(confObj.LastPush) > confObj.DBInterval + confObj.Mu.RLock() + answer := time.Since(confObj.LastPush) > confObj.DBInterval + confObj.Mu.RUnlock() + + return answer } // Launched by init as a coroutine to watch @@ -38,6 +46,7 @@ func cacheAndPush() { func refreshCache() { + twtxtCache.Mu.RLock() for k := range twtxtCache.Users { err := twtxtCache.UpdateUser(k) if err != nil { @@ -45,6 +54,7 @@ func refreshCache() { continue } } + twtxtCache.Mu.RUnlock() remoteRegistries.Mu.RLock() for _, v := range remoteRegistries.List { diff --git a/cache_test.go b/cache_test.go index 82d37c2..cb92c38 100644 --- a/cache_test.go +++ b/cache_test.go @@ -79,17 +79,19 @@ func Benchmark_pushDatabase(b *testing.B) { initDatabase() } - out, _, err := registry.GetTwtxt("https://gbmor.dev/twtxt.txt") - if err != nil { - b.Errorf("Couldn't set up benchmark: %v\n", err) - } + if _, ok := twtxtCache.Users["https://gbmor.dev/twtxt.txt"]; !ok { + out, _, err := registry.GetTwtxt("https://gbmor.dev/twtxt.txt") + if err != nil { + b.Errorf("Couldn't set up benchmark: %v\n", err) + } - statusmap, err := registry.ParseUserTwtxt(out, "gbmor", "https://gbmor.dev/twtxt.txt") - if err != nil { - b.Errorf("Couldn't set up benchmark: %v\n", err) - } + statusmap, err := registry.ParseUserTwtxt(out, "gbmor", "https://gbmor.dev/twtxt.txt") + if err != nil { + b.Errorf("Couldn't set up benchmark: %v\n", err) + } - twtxtCache.AddUser("gbmor", "https://gbmor.dev/twtxt.txt", net.ParseIP("127.0.0.1"), statusmap) + twtxtCache.AddUser("gbmor", "https://gbmor.dev/twtxt.txt", net.ParseIP("127.0.0.1"), statusmap) + } b.ResetTimer() diff --git a/init_test.go b/init_test.go index 0739d47..bffe036 100644 --- a/init_test.go +++ b/init_test.go @@ -7,11 +7,15 @@ import ( ) var testport = fmt.Sprintf(":%v", confObj.Port) +var hasInit = false func initTestConf() { - initConfig() - tmpls = initTemplates() - logToNull() + if !hasInit { + initConfig() + tmpls = initTemplates() + logToNull() + hasInit = true + } } func logToNull() { -- cgit 1.4.1-2-gfad0