ソースを参照

fix: #686 - concurrent map read and write

jamesread 8 ヶ月 前
コミット
294e33d110

+ 6 - 0
service/internal/entities/storage.go

@@ -60,10 +60,16 @@ func GetAll() *variableBase {
 }
 
 func GetEntities() entitiesByClass {
+	rwmutex.RLock()
+	defer rwmutex.RUnlock()
+
 	return contents.Entities
 }
 
 func GetEntityInstances(entityName string) entityInstancesByKey {
+	rwmutex.RLock()
+	defer rwmutex.RUnlock()
+
 	if entities, ok := contents.Entities[entityName]; ok {
 		return entities
 	}

+ 4 - 1
service/internal/entities/templates.go

@@ -91,7 +91,7 @@ func ParseTemplateWithArgs(source string, ent *Entity, args map[string]string) s
 	}
 
 	templateVariables := &variableBase{
-		OliveTin:      contents.OliveTin,
+		OliveTin:      GetAll().OliveTin,
 		Arguments:     args,
 		CurrentEntity: entdata,
 	}
@@ -126,5 +126,8 @@ func ParseTemplateBoolWith(source string, ent *Entity) bool {
 }
 
 func ClearEntities(entityType string) {
+	rwmutex.Lock()
+	defer rwmutex.Unlock()
+
 	delete(contents.Entities, entityType)
 }