Addresses concurrent map read and write (#688)
This commit is contained in:
commit
d94f2aca1c
|
|
@ -60,15 +60,38 @@ func GetAll() *variableBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetEntities() entitiesByClass {
|
func GetEntities() entitiesByClass {
|
||||||
return contents.Entities
|
rwmutex.RLock()
|
||||||
|
|
||||||
|
copiedEntities := make(entitiesByClass, len(contents.Entities))
|
||||||
|
|
||||||
|
for entityName, entityInstances := range contents.Entities {
|
||||||
|
copiedInstances := make(entityInstancesByKey, len(entityInstances))
|
||||||
|
|
||||||
|
for key, entity := range entityInstances {
|
||||||
|
copiedInstances[key] = entity
|
||||||
|
}
|
||||||
|
copiedEntities[entityName] = copiedInstances
|
||||||
|
}
|
||||||
|
|
||||||
|
rwmutex.RUnlock()
|
||||||
|
|
||||||
|
return copiedEntities
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetEntityInstances(entityName string) entityInstancesByKey {
|
func GetEntityInstances(entityName string) entityInstancesByKey {
|
||||||
|
rwmutex.RLock()
|
||||||
|
defer rwmutex.RUnlock()
|
||||||
|
|
||||||
if entities, ok := contents.Entities[entityName]; ok {
|
if entities, ok := contents.Entities[entityName]; ok {
|
||||||
return entities
|
copiedInstances := make(entityInstancesByKey, len(entities))
|
||||||
|
|
||||||
|
for key, entity := range entities {
|
||||||
|
copiedInstances[key] = entity
|
||||||
|
}
|
||||||
|
return copiedInstances
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return make(entityInstancesByKey, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddEntity(entityName string, entityKey string, data any) {
|
func AddEntity(entityName string, entityKey string, data any) {
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ func ParseTemplateWithArgs(source string, ent *Entity, args map[string]string) s
|
||||||
}
|
}
|
||||||
|
|
||||||
templateVariables := &variableBase{
|
templateVariables := &variableBase{
|
||||||
OliveTin: contents.OliveTin,
|
OliveTin: GetAll().OliveTin,
|
||||||
Arguments: args,
|
Arguments: args,
|
||||||
CurrentEntity: entdata,
|
CurrentEntity: entdata,
|
||||||
}
|
}
|
||||||
|
|
@ -126,5 +126,8 @@ func ParseTemplateBoolWith(source string, ent *Entity) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func ClearEntities(entityType string) {
|
func ClearEntities(entityType string) {
|
||||||
|
rwmutex.Lock()
|
||||||
|
defer rwmutex.Unlock()
|
||||||
|
|
||||||
delete(contents.Entities, entityType)
|
delete(contents.Entities, entityType)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue