fix #4498 build ServerState Assemblies collection in a more thread safe manner

This commit is contained in:
sbwalker
2024-08-20 14:02:37 -04:00
parent 0ac1901f6b
commit aee0c27da7
2 changed files with 24 additions and 10 deletions

View File

@ -161,12 +161,12 @@ namespace Oqtane.Repository
if (siteId != -1)
{
var siteKey = _tenants.GetAlias().SiteKey;
var assemblies = new List<string>();
// get settings for site
var settings = _settings.GetSettings(EntityNames.Theme).ToList();
// populate theme site settings
var serverState = _serverState.GetServerState(siteKey);
foreach (Theme theme in Themes)
{
theme.SiteId = siteId;
@ -184,22 +184,29 @@ namespace Oqtane.Repository
if (theme.IsEnabled)
{
// build list of assemblies for site
if (!serverState.Assemblies.Contains(theme.AssemblyName))
if (!assemblies.Contains(theme.AssemblyName))
{
serverState.Assemblies.Add(theme.AssemblyName);
assemblies.Add(theme.AssemblyName);
}
if (!string.IsNullOrEmpty(theme.Dependencies))
{
foreach (var assembly in theme.Dependencies.Replace(".dll", "").Split(',', StringSplitOptions.RemoveEmptyEntries).Reverse())
{
if (!serverState.Assemblies.Contains(assembly.Trim()))
if (!assemblies.Contains(assembly.Trim()))
{
serverState.Assemblies.Insert(0, assembly.Trim());
assemblies.Insert(0, assembly.Trim());
}
}
}
}
}
// cache site assemblies
var serverState = _serverState.GetServerState(siteKey);
foreach (var assembly in assemblies)
{
if (!serverState.Assemblies.Contains(assembly)) serverState.Assemblies.Add(assembly);
}
}
return Themes;