From 22ee57582de3d3e0949013b1a59715890a1719ed Mon Sep 17 00:00:00 2001 From: Lombiq Date: Sun, 25 Jan 2015 22:33:27 +0100 Subject: [PATCH] #20928: Preventing race condition when starting shells Work Item: 20928 --- src/Orchard/Environment/DefaultOrchardHost.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Orchard/Environment/DefaultOrchardHost.cs b/src/Orchard/Environment/DefaultOrchardHost.cs index 03462d6ab..48a063bd6 100644 --- a/src/Orchard/Environment/DefaultOrchardHost.cs +++ b/src/Orchard/Environment/DefaultOrchardHost.cs @@ -26,6 +26,7 @@ namespace Orchard.Environment { private readonly IExtensionMonitoringCoordinator _extensionMonitoringCoordinator; private readonly ICacheManager _cacheManager; private readonly static object _syncLock = new object(); + private readonly static object _shellContextsWriteLock = new object(); private IEnumerable _shellContexts; @@ -158,10 +159,12 @@ namespace Orchard.Environment { Logger.Debug("Activating context for tenant {0}", context.Settings.Name); context.Shell.Activate(); - _shellContexts = (_shellContexts ?? Enumerable.Empty()) - .Where(c => c.Settings.Name != context.Settings.Name) - .Concat(new[] { context }) - .ToArray(); + lock (_shellContextsWriteLock) { + _shellContexts = (_shellContexts ?? Enumerable.Empty()) + .Where(c => c.Settings.Name != context.Settings.Name) + .Concat(new[] { context }) + .ToArray(); + } _runningShellTable.Add(context.Settings); }