From 589d62c9cea22b3c90b69bdd3878ec60a0c6b8e7 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 19 Aug 2025 13:39:35 +0200 Subject: [PATCH] Avoid modification of the list while iterating over it --- .../Tools/PluginSystem/PluginConfigurationObject.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObject.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObject.cs index 5939c0b4..d7d4f5f2 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObject.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObject.cs @@ -44,8 +44,8 @@ public sealed record PluginConfigurationObject IList availablePlugins, IList configObjectList) where TClass : IConfigurationObject { - var wasConfigurationChanged = false; var configuredObjects = configObjectSelection.Compile()(SETTINGS_MANAGER.ConfigurationData); + var leftOverObjects = new List(); foreach (var configuredObject in configuredObjects) { if(!configuredObject.IsEnterpriseConfiguration) @@ -59,8 +59,7 @@ public sealed record PluginConfigurationObject if(templateSourcePlugin is null) { LOG.LogWarning($"The configured object '{configuredObject.Name}' (id={configuredObject.Id}) is based on a plugin that is not available anymore. Removing the chat template from the settings."); - configuredObjects.Remove(configuredObject); - wasConfigurationChanged = true; + leftOverObjects.Add(configuredObject); } if(!configObjectList.Any(configObject => @@ -69,11 +68,15 @@ public sealed record PluginConfigurationObject configObject.Id.ToString() == configuredObject.Id)) { LOG.LogWarning($"The configured object '{configuredObject.Name}' (id={configuredObject.Id}) is not present in the configuration plugin anymore. Removing the chat template from the settings."); - configuredObjects.Remove(configuredObject); - wasConfigurationChanged = true; + leftOverObjects.Add(configuredObject); } } + // Remove collected items after enumeration to avoid modifying the collection during iteration: + var wasConfigurationChanged = leftOverObjects.Count > 0; + foreach (var item in leftOverObjects.Distinct()) + configuredObjects.Remove(item); + return wasConfigurationChanged; } } \ No newline at end of file