From 1b4bee3d1302a4a779dd6efa396f0ad1cf8008ae Mon Sep 17 00:00:00 2001 From: MidoriKami <9083275+MidoriKami@users.noreply.github.com> Date: Fri, 8 Sep 2023 21:07:03 -0700 Subject: [PATCH] Remove array copy of handlers. --- Dalamud/Game/AddonLifecycle/AddonLifecycle.cs | 20 ++++++++----------- Dalamud/Plugin/Services/IAddonLifecycle.cs | 5 ++--- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/Dalamud/Game/AddonLifecycle/AddonLifecycle.cs b/Dalamud/Game/AddonLifecycle/AddonLifecycle.cs index c0094d11a..c0e817f0d 100644 --- a/Dalamud/Game/AddonLifecycle/AddonLifecycle.cs +++ b/Dalamud/Game/AddonLifecycle/AddonLifecycle.cs @@ -346,21 +346,17 @@ internal class AddonLifecyclePluginScoped : IDisposable, IServiceType, IAddonLif } /// - public void UnregisterListener(IAddonLifecycle.AddonEventDelegate handler, params IAddonLifecycle.AddonEventDelegate[] handlers) + public void UnregisterListener(params IAddonLifecycle.AddonEventDelegate[] handlers) { - foreach (var listener in this.eventListeners.Where(entry => entry.FunctionDelegate == handler).ToArray()) + foreach (var handler in handlers) { - this.addonLifecycleService.UnregisterListener(listener); - this.eventListeners.Remove(listener); - } - - foreach (var handlerParma in handlers) - { - foreach (var listener in this.eventListeners.Where(entry => entry.FunctionDelegate == handlerParma).ToArray()) + this.eventListeners.RemoveAll(entry => { - this.addonLifecycleService.UnregisterListener(listener); - this.eventListeners.Remove(listener); - } + if (entry.FunctionDelegate != handler) return false; + + this.addonLifecycleService.UnregisterListener(entry); + return true; + }); } } } diff --git a/Dalamud/Plugin/Services/IAddonLifecycle.cs b/Dalamud/Plugin/Services/IAddonLifecycle.cs index 1e318ae79..cbb3d7c24 100644 --- a/Dalamud/Plugin/Services/IAddonLifecycle.cs +++ b/Dalamud/Plugin/Services/IAddonLifecycle.cs @@ -77,9 +77,8 @@ public interface IAddonLifecycle /// /// Unregister all events that use the specified handlers. /// - /// Event handler to remove. - /// Additional handlers to remove. - void UnregisterListener(AddonEventDelegate handler, params AddonEventDelegate[] handlers); + /// Handlers to remove. + void UnregisterListener(params AddonEventDelegate[] handlers); /// /// Addon argument data for use in event subscribers.