From 964286ab99401c36202cb1610dda918713e7e569 Mon Sep 17 00:00:00 2001 From: Mykhailo Pylyp Date: Tue, 9 Mar 2021 18:31:30 +0200 Subject: [PATCH] Makes AllPlugins single tone thread safe (#10121) --- .../launcher/PowerLauncher/Plugin/PluginManager.cs | 9 ++++++++- .../launcher/PowerLauncher/Plugin/PluginsLoader.cs | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs b/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs index 8280527abc..12e2a3cfd7 100644 --- a/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs +++ b/src/modules/launcher/PowerLauncher/Plugin/PluginManager.cs @@ -24,6 +24,7 @@ namespace PowerLauncher.Plugin { private static readonly IFileSystem FileSystem = new FileSystem(); private static readonly IDirectory Directory = FileSystem.Directory; + private static readonly object AllPluginsLock = new object(); private static IEnumerable _contextMenuPlugins = new List(); @@ -44,7 +45,13 @@ namespace PowerLauncher.Plugin { if (_allPlugins == null) { - _allPlugins = PluginsLoader.Plugins(PluginConfig.Parse(Directories)); + lock (AllPluginsLock) + { + if (_allPlugins == null) + { + _allPlugins = PluginsLoader.Plugins(PluginConfig.Parse(Directories)); + } + } } return _allPlugins; diff --git a/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs b/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs index 44434135ad..2b51e114e0 100644 --- a/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs +++ b/src/modules/launcher/PowerLauncher/Plugin/PluginsLoader.cs @@ -27,7 +27,9 @@ namespace PowerLauncher.Plugin public static IEnumerable CSharpPlugins(List source) { var plugins = new List(); - var metadatas = source.Where(o => o.Language.ToUpperInvariant() == AllowedLanguage.CSharp); + var metadatas = source + .Where(o => o.Language.ToUpperInvariant() == AllowedLanguage.CSharp) + .ToList(); foreach (var metadata in metadatas) {