From 97026dd0fac8971dc1857bf35a00c9b17bc814f3 Mon Sep 17 00:00:00 2001 From: Lombiq Date: Sat, 18 Jan 2014 22:40:53 +0100 Subject: [PATCH] #20374: Fixing that tenant suspend/restart didn't take effect until an app restart Work Item: 20374 --- src/Orchard/Environment/DefaultOrchardHost.cs | 12 ++++++++++++ src/Orchard/Environment/RunningShellTable.cs | 2 ++ 2 files changed, 14 insertions(+) diff --git a/src/Orchard/Environment/DefaultOrchardHost.cs b/src/Orchard/Environment/DefaultOrchardHost.cs index fed692030..195c54ef0 100644 --- a/src/Orchard/Environment/DefaultOrchardHost.cs +++ b/src/Orchard/Environment/DefaultOrchardHost.cs @@ -260,6 +260,10 @@ namespace Orchard.Environment { // look for the associated shell context var shellContext = _shellContexts.FirstOrDefault(c => c.Settings.Name == settings.Name); + if (shellContext == null && settings.State == TenantState.Disabled) { + return; + } + // is this is a new tenant ? or is it a tenant waiting for setup ? if (shellContext == null || settings.State == TenantState.Uninitialized) { // create the Shell @@ -268,6 +272,14 @@ namespace Orchard.Environment { // activate the Shell ActivateShell(context); } + // terminate the shell if the tenant was disabled + else if (settings.State == TenantState.Disabled) { + shellContext.Shell.Terminate(); + shellContext.LifetimeScope.Dispose(); + _runningShellTable.Remove(settings); + + _shellContexts = _shellContexts.Where(shell => shell.Settings.Name != settings.Name); + } // reload the shell as its settings have changed else { // dispose previous context diff --git a/src/Orchard/Environment/RunningShellTable.cs b/src/Orchard/Environment/RunningShellTable.cs index 0e0787567..3d6a6cc1e 100644 --- a/src/Orchard/Environment/RunningShellTable.cs +++ b/src/Orchard/Environment/RunningShellTable.cs @@ -101,6 +101,8 @@ namespace Orchard.Environment { // will not be mapped to routes coming from orchard _fallback = null; } + + _shellsByHostAndPrefix.Clear(); } public ShellSettings Match(HttpContextBase httpContext) {