Addresses concurrent map read and write (#688)

This commit is contained in:
James Read 2025-11-05 00:46:10 +00:00 committed by GitHub
commit d94f2aca1c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 30 additions and 4 deletions

View File

@ -60,15 +60,38 @@ func GetAll() *variableBase {
}
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 {
rwmutex.RLock()
defer rwmutex.RUnlock()
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) {

View File

@ -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)
}