From 4d1536f1ecde8ed03e1f2e69f45207eb9dddfa7c Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Mon, 12 Dec 2016 00:07:36 +0000 Subject: Allow OpenSim to respond to Unix signals. This may need work to be properly ignoed on Windows. Windows devs, please test and check for platform flags if this causes issues in Windows --- OpenSim/Region/Application/OpenSim.cs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'OpenSim/Region/Application/OpenSim.cs') diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index cf2bf33..203fe5e 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -26,6 +26,7 @@ */ using System; +using System.Threading; using System.Collections; using System.Collections.Generic; using System.Diagnostics; @@ -74,7 +75,7 @@ namespace OpenSim private string m_timedScript = "disabled"; private int m_timeInterval = 1200; - private Timer m_scriptTimer; + private System.Timers.Timer m_scriptTimer; public OpenSim(IConfigSource configSource) : base(configSource) { @@ -125,6 +126,25 @@ namespace OpenSim m_log.Info("[OPENSIM MAIN]: Using async_call_method " + Util.FireAndForgetMethod); } + private static Mono.Unix.UnixSignal[] signals = new Mono.Unix.UnixSignal[] + { +// new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGINT), + new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGTERM) + }; + + private Thread signal_thread = new Thread (delegate () + { + System.Console.WriteLine("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); + while (true) + { + // Wait for a signal to be delivered + int index = Mono.Unix.UnixSignal.WaitAny (signals, -1); + + //Mono.Unix.Native.Signum signal = signals [index].Signum; + MainConsole.Instance.RunCommand("shutdown"); + } + }); + /// /// Performs initialisation of the scene, such as loading configuration from disk. /// @@ -134,6 +154,7 @@ namespace OpenSim m_log.Info("========================= STARTING OPENSIM ========================="); m_log.Info("===================================================================="); + signal_thread.Start(); //m_log.InfoFormat("[OPENSIM MAIN]: GC Is Server GC: {0}", GCSettings.IsServerGC.ToString()); // http://msdn.microsoft.com/en-us/library/bb384202.aspx //GCSettings.LatencyMode = GCLatencyMode.Batch; @@ -217,7 +238,7 @@ namespace OpenSim // Start timer script (run a script every xx seconds) if (m_timedScript != "disabled") { - m_scriptTimer = new Timer(); + m_scriptTimer = new System.Timers.Timer(); m_scriptTimer.Enabled = true; m_scriptTimer.Interval = m_timeInterval*1000; m_scriptTimer.Elapsed += RunAutoTimerScript; -- cgit v1.1 From da2c1e8aadd3de2821e1aa1e002259876077d271 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Mon, 12 Dec 2016 00:54:41 +0000 Subject: don't do unix signals on windows --- OpenSim/Region/Application/OpenSim.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'OpenSim/Region/Application/OpenSim.cs') diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 203fe5e..aba09e0 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -126,11 +126,8 @@ namespace OpenSim m_log.Info("[OPENSIM MAIN]: Using async_call_method " + Util.FireAndForgetMethod); } - private static Mono.Unix.UnixSignal[] signals = new Mono.Unix.UnixSignal[] - { -// new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGINT), - new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGTERM) - }; + private static Mono.Unix.UnixSignal[] signals; + private Thread signal_thread = new Thread (delegate () { @@ -154,7 +151,16 @@ namespace OpenSim m_log.Info("========================= STARTING OPENSIM ========================="); m_log.Info("===================================================================="); - signal_thread.Start(); + if(!Util.IsWindows()) + { + // linux mac os specifics + signals = new Mono.Unix.UnixSignal[] + { +// new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGINT), + new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGTERM) + }; + signal_thread.Start(); + } //m_log.InfoFormat("[OPENSIM MAIN]: GC Is Server GC: {0}", GCSettings.IsServerGC.ToString()); // http://msdn.microsoft.com/en-us/library/bb384202.aspx //GCSettings.LatencyMode = GCLatencyMode.Batch; -- cgit v1.1 From cdfdf6322defc614a1261a38c710bf3f73cd4dc7 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Mon, 12 Dec 2016 09:26:12 +0000 Subject: Applying a modified version of TomTheDragon's patch to prevent the sim from crashing when signals are unavailable. --- OpenSim/Region/Application/OpenSim.cs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'OpenSim/Region/Application/OpenSim.cs') diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index aba09e0..3cb999b 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -131,7 +131,6 @@ namespace OpenSim private Thread signal_thread = new Thread (delegate () { - System.Console.WriteLine("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); while (true) { // Wait for a signal to be delivered @@ -153,13 +152,21 @@ namespace OpenSim if(!Util.IsWindows()) { - // linux mac os specifics - signals = new Mono.Unix.UnixSignal[] + try { -// new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGINT), - new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGTERM) - }; - signal_thread.Start(); + // linux mac os specifics + signals = new Mono.Unix.UnixSignal[] + { + new Mono.Unix.UnixSignal(Mono.Unix.Native.Signum.SIGTERM) + }; + signal_thread.Start(); + } + catch (Exception e) + { + m_log.Info("Could not set up UNIX signal handlers. SIGTERM will not"); + m_log.InfoFormat("shut down gracefully: {0}", e.Message); + m_log.Debug("Exception was: ", e); + } } //m_log.InfoFormat("[OPENSIM MAIN]: GC Is Server GC: {0}", GCSettings.IsServerGC.ToString()); // http://msdn.microsoft.com/en-us/library/bb384202.aspx -- cgit v1.1