diff options
author | Ben Morrison <ben@gbmor.dev> | 2019-05-27 19:01:04 -0400 |
---|---|---|
committer | Ben Morrison <ben@gbmor.dev> | 2019-05-27 19:01:04 -0400 |
commit | d6d0c18cad6426a0562d19b2b0c66a7c2bb4e2c5 (patch) | |
tree | 0157890c7bf462db415ad0ed59828576496b2685 | |
parent | 6f9383517d8dbee557d2b52113e20e08207b533e (diff) | |
download | getwtxt-d6d0c18cad6426a0562d19b2b0c66a7c2bb4e2c5.tar.gz |
fixed race condition
-rw-r--r-- | cache.go | 14 | ||||
-rw-r--r-- | cache_test.go | 20 | ||||
-rw-r--r-- | 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() { |