From dca3a45803a18103113b9eb861da4f79572de924 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 24 May 2017 22:17:04 +0100 Subject: [PATCH] add a bit more pre exit cleanup --- OpenSim/Framework/Servers/BaseOpenSimServer.cs | 8 ++++---- OpenSim/Framework/Util.cs | 10 ++++++++++ OpenSim/Server/Base/ServicesServerBase.cs | 3 +++ OpenSim/Server/ServerMain.cs | 6 ++++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index 7d21e000e3..bc68681ff4 100644 --- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs +++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs @@ -108,16 +108,16 @@ namespace OpenSim.Framework.Servers protected override void ShutdownSpecific() { - - + Watchdog.Enabled = false; base.ShutdownSpecific(); - + MainServer.Stop(); Thread.Sleep(5000); - + Util.StopThreadPool(); WorkManager.Stop(); + Thread.Sleep(1000); RemovePIDFile(); m_log.Info("[SHUTDOWN]: Shutdown processing on main thread complete. Exiting..."); diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index f6ded04cc1..3342df3a93 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -2852,6 +2852,16 @@ namespace OpenSim.Framework return stpi; } + public static void StopThreadPool() + { + if (m_ThreadPool == null) + return; + SmartThreadPool pool = m_ThreadPool; + m_ThreadPool = null; + + try { pool.Shutdown(); } catch {} + } + #endregion FireAndForget Threading Pattern /// diff --git a/OpenSim/Server/Base/ServicesServerBase.cs b/OpenSim/Server/Base/ServicesServerBase.cs index 4951776cf9..8db97a84c3 100644 --- a/OpenSim/Server/Base/ServicesServerBase.cs +++ b/OpenSim/Server/Base/ServicesServerBase.cs @@ -249,6 +249,9 @@ namespace OpenSim.Server.Base } } + MemoryWatchdog.Enabled = false; + Watchdog.Enabled = false; + RemovePIDFile(); return 0; diff --git a/OpenSim/Server/ServerMain.cs b/OpenSim/Server/ServerMain.cs index 341c227e8b..accf9385ff 100644 --- a/OpenSim/Server/ServerMain.cs +++ b/OpenSim/Server/ServerMain.cs @@ -31,6 +31,7 @@ using System.Reflection; using System; using System.Net; using System.Collections.Generic; +using OpenSim.Framework; using OpenSim.Framework.Servers; using OpenSim.Framework.Servers.HttpServer; using OpenSim.Server.Base; @@ -161,6 +162,11 @@ namespace OpenSim.Server int res = m_Server.Run(); + if(m_Server != null) + m_Server.Shutdown(); + + Util.StopThreadPool(); + Environment.Exit(res); return 0;