Parcourir la source

fix: #686 - concurrent map read and write - in entity instances

jamesread il y a 8 mois
Parent
commit
055472902d
1 fichiers modifiés avec 9 ajouts et 2 suppressions
  1. 9 2
      service/internal/entities/storage.go

+ 9 - 2
service/internal/entities/storage.go

@@ -63,8 +63,10 @@ func GetEntities() entitiesByClass {
 	rwmutex.RLock()
 	rwmutex.RLock()
 
 
 	copiedEntities := make(entitiesByClass, len(contents.Entities))
 	copiedEntities := make(entitiesByClass, len(contents.Entities))
+
 	for entityName, entityInstances := range contents.Entities {
 	for entityName, entityInstances := range contents.Entities {
 		copiedInstances := make(entityInstancesByKey, len(entityInstances))
 		copiedInstances := make(entityInstancesByKey, len(entityInstances))
+
 		for key, entity := range entityInstances {
 		for key, entity := range entityInstances {
 			copiedInstances[key] = entity
 			copiedInstances[key] = entity
 		}
 		}
@@ -81,10 +83,15 @@ func GetEntityInstances(entityName string) entityInstancesByKey {
 	defer rwmutex.RUnlock()
 	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) {