fix #4498 build ServerState Assemblies collection in a more thread safe manner
This commit is contained in:
		| @ -185,6 +185,7 @@ namespace Oqtane.Repository | ||||
|             if (siteId != -1) | ||||
|             { | ||||
|                 var siteKey = _tenants.GetAlias().SiteKey; | ||||
|                 var assemblies = new List<string>(); | ||||
|  | ||||
|                 // get all module definition permissions for site | ||||
|                 List<Permission> permissions = _permissions.GetPermissions(siteId, EntityNames.ModuleDefinition).ToList(); | ||||
| @ -193,7 +194,6 @@ namespace Oqtane.Repository | ||||
|                 var settings = _settings.GetSettings(EntityNames.ModuleDefinition).ToList(); | ||||
|  | ||||
|                 // populate module definition site settings and permissions | ||||
|                 var serverState = _serverState.GetServerState(siteKey); | ||||
|                 foreach (ModuleDefinition moduledefinition in ModuleDefinitions) | ||||
|                 { | ||||
|                     moduledefinition.SiteId = siteId; | ||||
| @ -211,17 +211,17 @@ namespace Oqtane.Repository | ||||
|                     if (moduledefinition.IsEnabled) | ||||
|                     { | ||||
|                         // build list of assemblies for site | ||||
|                         if (!serverState.Assemblies.Contains(moduledefinition.AssemblyName)) | ||||
|                         if (!assemblies.Contains(moduledefinition.AssemblyName)) | ||||
|                         { | ||||
|                             serverState.Assemblies.Add(moduledefinition.AssemblyName); | ||||
|                             assemblies.Add(moduledefinition.AssemblyName); | ||||
|                         } | ||||
|                         if (!string.IsNullOrEmpty(moduledefinition.Dependencies)) | ||||
|                         { | ||||
|                             foreach (var assembly in moduledefinition.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()); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
| @ -248,6 +248,13 @@ namespace Oqtane.Repository | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 // cache site assemblies | ||||
|                 var serverState = _serverState.GetServerState(siteKey); | ||||
|                 foreach (var assembly in assemblies) | ||||
|                 { | ||||
|                     if (!serverState.Assemblies.Contains(assembly)) serverState.Assemblies.Add(assembly); | ||||
|                 } | ||||
|  | ||||
|                 // clean up any orphaned permissions | ||||
|                 var ids = new HashSet<int>(ModuleDefinitions.Select(item => item.ModuleDefinitionId)); | ||||
|                 foreach (var permission in permissions.Where(item => !ids.Contains(item.EntityId))) | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 sbwalker
					sbwalker