From 960a0fa360363c9173270e9850816f50f15df3d1 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 31 Dec 2020 02:46:38 +0000 Subject: [PATCH] smartthreadpool: add pool option SuppressFlow and test it on main smart?? pool (may go bad) --- OpenSim/Framework/Util.cs | 3 ++- ThirdParty/SmartThreadPool/STPStartInfo.cs | 12 ++++++++++ ThirdParty/SmartThreadPool/SmartThreadPool.cs | 24 ++++++++++++++----- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index ae1ff0a74b..4a40a27e14 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -2898,7 +2898,8 @@ namespace OpenSim.Framework ThreadPoolName = "Util", IdleTimeout = 20000, MaxWorkerThreads = maxThreads, - MinWorkerThreads = minThreads + MinWorkerThreads = minThreads, + SuppressFlow = true }; m_ThreadPool = new SmartThreadPool(startInfo); diff --git a/ThirdParty/SmartThreadPool/STPStartInfo.cs b/ThirdParty/SmartThreadPool/STPStartInfo.cs index d458c77386..cb3573133c 100644 --- a/ThirdParty/SmartThreadPool/STPStartInfo.cs +++ b/ThirdParty/SmartThreadPool/STPStartInfo.cs @@ -17,6 +17,7 @@ namespace Amib.Threading private bool _enableLocalPerformanceCounters; private string _threadPoolName = SmartThreadPool.DefaultThreadPoolName; private int? _maxStackSize = SmartThreadPool.DefaultMaxStackSize; + private bool _supressflow = false; public STPStartInfo() { @@ -39,6 +40,7 @@ namespace Amib.Threading _threadPoolName = stpStartInfo._threadPoolName; _areThreadsBackground = stpStartInfo.AreThreadsBackground; _apartmentState = stpStartInfo._apartmentState; + _supressflow = stpStartInfo._supressflow; } /// @@ -191,5 +193,15 @@ namespace Amib.Threading _maxStackSize = value; } } + + public bool SuppressFlow + { + get { return _supressflow; } + set + { + ThrowIfReadOnly(); + _supressflow = value; + } + } } } diff --git a/ThirdParty/SmartThreadPool/SmartThreadPool.cs b/ThirdParty/SmartThreadPool/SmartThreadPool.cs index 6e7cc51bcf..655bd65bb9 100644 --- a/ThirdParty/SmartThreadPool/SmartThreadPool.cs +++ b/ThirdParty/SmartThreadPool/SmartThreadPool.cs @@ -608,12 +608,24 @@ namespace Amib.Threading } // Create a new thread - - Thread workerThread = - _stpStartInfo.MaxStackSize.HasValue - ? new Thread(ProcessQueuedItems, _stpStartInfo.MaxStackSize.Value) - : new Thread(ProcessQueuedItems); - + Thread workerThread; + if(_stpStartInfo.SuppressFlow) + { + using(ExecutionContext.SuppressFlow()) + { + workerThread = + _stpStartInfo.MaxStackSize.HasValue + ? new Thread(ProcessQueuedItems, _stpStartInfo.MaxStackSize.Value) + : new Thread(ProcessQueuedItems); + } + } + else + { + workerThread = + _stpStartInfo.MaxStackSize.HasValue + ? new Thread(ProcessQueuedItems, _stpStartInfo.MaxStackSize.Value) + : new Thread(ProcessQueuedItems); + } // Configure the new thread and start it workerThread.IsBackground = _stpStartInfo.AreThreadsBackground;