From 9f5a5d8593415a0e703e23037da2f6aa6a3d6cf5 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Tue, 6 Aug 2024 02:11:17 +1000 Subject: [PATCH] Fix crash due to mutating `ToolManager._tools` while enumerating it resolves #3983 --- src/BizHawk.Client.EmuHawk/tools/ToolManager.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs index d819a54fb1..0d34bfa728 100644 --- a/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -479,7 +479,7 @@ namespace BizHawk.Client.EmuHawk /// Type of tools to check public T FirstOrNull(Predicate condition) where T : class { - foreach (var tool in _tools) + foreach (var tool in _tools) // not bothering to copy here since `condition` is expected to have no side-effects { if (tool.IsActive && tool is T specialTool && condition(specialTool)) { @@ -594,7 +594,7 @@ namespace BizHawk.Client.EmuHawk var unavailable = new List(); - foreach (var tool in _tools) + foreach (var tool in _tools.ToArray()) // copy because a tool may open another { SetBaseProperties(tool); if (ServiceInjector.UpdateServices(_emulator.ServiceProvider, tool) @@ -748,7 +748,7 @@ namespace BizHawk.Client.EmuHawk public void UpdateToolsBefore() { - foreach (var tool in _tools) + foreach (var tool in _tools.ToArray()) // copy because a tool may open another { if (tool.IsActive) { @@ -759,7 +759,7 @@ namespace BizHawk.Client.EmuHawk public void UpdateToolsAfter() { - foreach (var tool in _tools) + foreach (var tool in _tools.ToArray()) // copy because a tool may open another { if (tool.IsActive) { @@ -770,7 +770,7 @@ namespace BizHawk.Client.EmuHawk public void FastUpdateBefore() { - foreach (var tool in _tools) + foreach (var tool in _tools.ToArray()) // copy because a tool may open another { if (tool.IsActive) { @@ -781,7 +781,7 @@ namespace BizHawk.Client.EmuHawk public void FastUpdateAfter() { - foreach (var tool in _tools) + foreach (var tool in _tools.ToArray()) // copy because a tool may open another { if (tool.IsActive) {