From dca3a45803a18103113b9eb861da4f79572de924 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 24 May 2017 22:17:04 +0100 Subject: add a bit more pre exit cleanup --- OpenSim/Framework/Servers/BaseOpenSimServer.cs | 8 ++++---- OpenSim/Framework/Util.cs | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index 7d21e00..bc68681 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 f6ded04..3342df3 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 /// -- cgit v1.1 From b6c23fe91169ed7065280464d20bba658252e278 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 25 May 2017 02:01:36 +0100 Subject: make a few more threads background ones --- OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index e1bd564..bd1c040 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs @@ -91,7 +91,7 @@ namespace OpenSim.Framework.Servers.HttpServer PoolWorkerJob, string.Format("PollServiceWorkerThread {0}:{1}", i, m_server.Port), ThreadPriority.Normal, - false, + true, false, null, int.MaxValue); @@ -101,7 +101,7 @@ namespace OpenSim.Framework.Servers.HttpServer this.CheckRetries, string.Format("PollServiceWatcherThread:{0}", m_server.Port), ThreadPriority.Normal, - false, + true, true, null, 1000 * 60 * 10); -- cgit v1.1 From e5377eb839fe9edecae4063a823ff8bf10768b1c Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 25 May 2017 04:51:45 +0100 Subject: use threads from main pool on assetsconnector --- OpenSim/Framework/Util.cs | 1 - 1 file changed, 1 deletion(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 3342df3..5eedd29 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -2579,7 +2579,6 @@ namespace OpenSim.Framework } catch (ThreadAbortException e) { - m_log.Error(string.Format("Aborted threadfunc {0} ", threadFuncNum), e); } catch (Exception e) { -- cgit v1.1 From 772c5b7db030eb95da8852d711323244cfa91ab4 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 25 May 2017 06:05:02 +0100 Subject: move assetsconnector threads to whatchdog; Abort all alive threads known to watchdog before exit --- OpenSim/Framework/Monitoring/Watchdog.cs | 24 ++++++++++++++++++++++++ OpenSim/Framework/Monitoring/WorkManager.cs | 1 + OpenSim/Framework/Servers/BaseOpenSimServer.cs | 3 ++- 3 files changed, 27 insertions(+), 1 deletion(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/Monitoring/Watchdog.cs b/OpenSim/Framework/Monitoring/Watchdog.cs index 9cc61ee..8a4894e 100644 --- a/OpenSim/Framework/Monitoring/Watchdog.cs +++ b/OpenSim/Framework/Monitoring/Watchdog.cs @@ -180,6 +180,30 @@ namespace OpenSim.Framework.Monitoring m_watchdogTimer.Elapsed += WatchdogTimerElapsed; } + public static void Stop() + { + if(m_threads == null) + return; + + lock(m_threads) + { + m_enabled = false; + if(m_watchdogTimer != null) + { + m_watchdogTimer.Dispose(); + m_watchdogTimer = null; + } + + foreach(ThreadWatchdogInfo twi in m_threads.Values) + { + Thread t = twi.Thread; + if(t.IsAlive) + t.Abort(); + } + m_threads.Clear(); + } + } + /// /// Add a thread to the watchdog tracker. /// diff --git a/OpenSim/Framework/Monitoring/WorkManager.cs b/OpenSim/Framework/Monitoring/WorkManager.cs index a3e0390..9d52f71 100644 --- a/OpenSim/Framework/Monitoring/WorkManager.cs +++ b/OpenSim/Framework/Monitoring/WorkManager.cs @@ -85,6 +85,7 @@ namespace OpenSim.Framework.Monitoring public static void Stop() { JobEngine.Stop(); + Watchdog.Stop(); } /// diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index bc68681..81dd357 100644 --- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs +++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs @@ -119,9 +119,10 @@ namespace OpenSim.Framework.Servers Thread.Sleep(1000); RemovePIDFile(); + m_log.Info("[SHUTDOWN]: Shutdown processing on main thread complete. Exiting..."); - if (!SuppressExit) + if (!SuppressExit) Environment.Exit(0); } -- cgit v1.1