Jelajahi Sumber

fix: Address concurrency issue in entities storage

jamesread 8 bulan lalu
induk
melakukan
2b24daa6d0
1 mengubah file dengan 12 tambahan dan 2 penghapusan
  1. 12 2
      service/internal/entities/storage.go

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

@@ -61,9 +61,19 @@ func GetAll() *variableBase {
 
 func GetEntities() entitiesByClass {
 	rwmutex.RLock()
-	defer rwmutex.RUnlock()
 
-	return contents.Entities
+	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 {