diff --git a/src/NzbDrone.Common/Composition/PluginLoader.cs b/src/NzbDrone.Common/Composition/PluginLoader.cs index d72aced44..af1725d8f 100644 --- a/src/NzbDrone.Common/Composition/PluginLoader.cs +++ b/src/NzbDrone.Common/Composition/PluginLoader.cs @@ -12,6 +12,7 @@ namespace NzbDrone.Common.Composition public static class PluginLoader { private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(PluginLoader)); + private static readonly List PluginContexts = new (); public static (List, List) LoadPlugins(IEnumerable pluginPaths) { @@ -38,6 +39,7 @@ public static bool UnloadPlugins(List pluginRefs) private static (Assembly, WeakReference) LoadPlugin(string path) { var context = new PluginLoadContext(path); + PluginContexts.Add(context); var weakRef = new WeakReference(context, trackResurrection: true); // load from stream to avoid locking on windows @@ -53,7 +55,9 @@ private static void RequestPluginUnload(List pluginRefs) { if (pluginRef?.Target != null) { - ((PluginLoadContext)pluginRef.Target).Unload(); + var context = (PluginLoadContext)pluginRef.Target; + PluginContexts.Remove(context); + context.Unload(); } } }