diff --git a/BepInEx.Core/Configuration/ConfigFile.cs b/BepInEx.Core/Configuration/ConfigFile.cs index 8f67ef7..dfa756b 100644 --- a/BepInEx.Core/Configuration/ConfigFile.cs +++ b/BepInEx.Core/Configuration/ConfigFile.cs @@ -92,9 +92,12 @@ public class ConfigFile : IDictionary public ConfigEntryBase this[string section, string key] => this[new ConfigDefinition(section, key)]; /// - public IEnumerator> GetEnumerator() => - // We can't really do a read lock for this - Entries.GetEnumerator(); + public IEnumerator> GetEnumerator() + { + // Enumerate a snapshot taken under the lock so a concurrent mutation cannot invalidate the iterator. + lock (_ioLock) + return Entries.ToList().GetEnumerator(); + } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();