Makes AllPlugins single tone thread safe (#10121)

This commit is contained in:
Mykhailo Pylyp
2021-03-09 18:31:30 +02:00
committed by GitHub
parent 38eb6ad062
commit 964286ab99
2 changed files with 11 additions and 2 deletions

View File

@@ -24,6 +24,7 @@ namespace PowerLauncher.Plugin
{ {
private static readonly IFileSystem FileSystem = new FileSystem(); private static readonly IFileSystem FileSystem = new FileSystem();
private static readonly IDirectory Directory = FileSystem.Directory; private static readonly IDirectory Directory = FileSystem.Directory;
private static readonly object AllPluginsLock = new object();
private static IEnumerable<PluginPair> _contextMenuPlugins = new List<PluginPair>(); private static IEnumerable<PluginPair> _contextMenuPlugins = new List<PluginPair>();
@@ -44,7 +45,13 @@ namespace PowerLauncher.Plugin
{ {
if (_allPlugins == null) if (_allPlugins == null)
{ {
_allPlugins = PluginsLoader.Plugins(PluginConfig.Parse(Directories)); lock (AllPluginsLock)
{
if (_allPlugins == null)
{
_allPlugins = PluginsLoader.Plugins(PluginConfig.Parse(Directories));
}
}
} }
return _allPlugins; return _allPlugins;

View File

@@ -27,7 +27,9 @@ namespace PowerLauncher.Plugin
public static IEnumerable<PluginPair> CSharpPlugins(List<PluginMetadata> source) public static IEnumerable<PluginPair> CSharpPlugins(List<PluginMetadata> source)
{ {
var plugins = new List<PluginPair>(); var plugins = new List<PluginPair>();
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) foreach (var metadata in metadatas)
{ {