summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBen Morrison <ben@gbmor.dev>2019-05-27 19:01:04 -0400
committerBen Morrison <ben@gbmor.dev>2019-05-27 19:01:04 -0400
commitd6d0c18cad6426a0562d19b2b0c66a7c2bb4e2c5 (patch)
tree0157890c7bf462db415ad0ed59828576496b2685
parent6f9383517d8dbee557d2b52113e20e08207b533e (diff)
downloadgetwtxt-d6d0c18cad6426a0562d19b2b0c66a7c2bb4e2c5.tar.gz
fixed race condition
-rw-r--r--cache.go14
-rw-r--r--cache_test.go20
-rw-r--r--init_test.go10
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() {