From 7c824f02b445579c0ef54a2212f851ae811a639d Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 28 Jan 2012 22:19:10 +0100 Subject: [PATCH] Add the ability to abort a pending restart using the viewer UI or a RemoteAdmin message --- .../RemoteController/RemoteAdminPlugin.cs | 20 ++++++++++++++++++- .../World/Estate/EstateManagementModule.cs | 6 ++++++ .../CoreModules/World/Region/RestartModule.cs | 3 +++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index dcc88c4144..914e4d64bc 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -263,6 +263,8 @@ namespace OpenSim.ApplicationPlugins.RemoteController Scene rebootedScene = null; GetSceneFromRegionParams(requestData, responseData, out rebootedScene); + IRestartModule restartModule = rebootedScene.RequestModuleInterface(); + responseData["success"] = false; responseData["accepted"] = true; responseData["rebooting"] = true; @@ -273,6 +275,23 @@ namespace OpenSim.ApplicationPlugins.RemoteController if (requestData.ContainsKey("alerts")) { string[] alertTimes = requestData["alerts"].ToString().Split( new char[] {','}); + if (alertTimes.Length == 1 && Convert.ToInt32(alertTimes[0]) == -1) + { + if (restartModule != null) + { + message = "Restart has been cancelled"; + + if (requestData.ContainsKey("message")) + message = requestData["message"].ToString(); + + restartModule.AbortRestart(message); + + responseData["success"] = true; + responseData["rebooting"] = false; + + return; + } + } foreach (string a in alertTimes) times.Add(Convert.ToInt32(a)); } @@ -305,7 +324,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController notice = false; } - IRestartModule restartModule = rebootedScene.RequestModuleInterface(); if (restartModule != null) { restartModule.ScheduleRestart(UUID.Zero, message, times.ToArray(), notice); diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index 161cf82588..d5e3314c25 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs @@ -256,6 +256,12 @@ namespace OpenSim.Region.CoreModules.World.Estate IRestartModule restartModule = Scene.RequestModuleInterface(); if (restartModule != null) { + if (timeInSeconds == -1) + { + restartModule.AbortRestart("Restart aborted by region manager"); + return; + } + List times = new List(); while (timeInSeconds > 0) { diff --git a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs index 7f6f4df2c6..86821c605d 100644 --- a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs +++ b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs @@ -240,6 +240,9 @@ namespace OpenSim.Region.CoreModules.World.Region if (m_DialogModule != null && message != String.Empty) m_DialogModule.SendGeneralAlert(message); } + if (m_MarkerPath != String.Empty) + File.Delete(Path.Combine(m_MarkerPath, + m_Scene.RegionInfo.RegionID.ToString())); } private void HandleRegionRestart(string module, string[] args)