From 319069d193dc0c812bed40077a75935288f3f5cf Mon Sep 17 00:00:00 2001
From: Oren Hurvitz
Date: Fri, 4 Jan 2013 08:43:05 +0200
Subject: Assign the SmartThreadPool name in the constructor
This is required because some threads are created in the constructor, so assigning the name afterwards would be too late.
---
OpenSim/Framework/Util.cs | 9 +++++++--
OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 4 ++--
ThirdParty/SmartThreadPool/STPStartInfo.cs | 14 ++++++++++++++
ThirdParty/SmartThreadPool/SmartThreadPool.cs | 8 +++++++-
4 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 7204279..0bd2977 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -1658,8 +1658,13 @@ namespace OpenSim.Framework
if (m_ThreadPool != null)
throw new InvalidOperationException("SmartThreadPool is already initialized");
- m_ThreadPool = new SmartThreadPool(2000, maxThreads, 2);
- m_ThreadPool.Name = "Util";
+ STPStartInfo startInfo = new STPStartInfo();
+ startInfo.ThreadPoolName = "Util";
+ startInfo.IdleTimeout = 2000;
+ startInfo.MaxWorkerThreads = maxThreads;
+ startInfo.MinWorkerThreads = 2;
+
+ m_ThreadPool = new SmartThreadPool(startInfo);
}
public static int FireAndForgetCount()
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 8c3bb5b..4d06eec 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -1486,7 +1486,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
m_MaxScriptQueue = maxScriptQueue;
STPStartInfo startInfo = new STPStartInfo();
- startInfo.IdleTimeout = idleTimeout*1000; // convert to seconds as stated in .ini
+ startInfo.ThreadPoolName = "XEngine";
+ startInfo.IdleTimeout = idleTimeout * 1000; // convert to seconds as stated in .ini
startInfo.MaxWorkerThreads = maxThreads;
startInfo.MinWorkerThreads = minThreads;
startInfo.ThreadPriority = threadPriority;;
@@ -1494,7 +1495,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
startInfo.StartSuspended = true;
m_ThreadPool = new SmartThreadPool(startInfo);
- m_ThreadPool.Name = "XEngine";
}
//
diff --git a/ThirdParty/SmartThreadPool/STPStartInfo.cs b/ThirdParty/SmartThreadPool/STPStartInfo.cs
index d181563..fa9ceb4 100644
--- a/ThirdParty/SmartThreadPool/STPStartInfo.cs
+++ b/ThirdParty/SmartThreadPool/STPStartInfo.cs
@@ -33,6 +33,11 @@ namespace Amib.Threading
private ThreadPriority _threadPriority;
///
+ /// The thread pool name. Threads will get names depending on this.
+ ///
+ private string _threadPoolName;
+
+ ///
/// If this field is not null then the performance counters are enabled
/// and use the string as the name of the instance.
///
@@ -46,6 +51,7 @@ namespace Amib.Threading
_minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads;
_maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads;
_threadPriority = SmartThreadPool.DefaultThreadPriority;
+ _threadPoolName = SmartThreadPool.DefaultThreadPoolName;
_pcInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName;
_stackSize = SmartThreadPool.DefaultStackSize;
}
@@ -56,6 +62,7 @@ namespace Amib.Threading
_minWorkerThreads = stpStartInfo._minWorkerThreads;
_maxWorkerThreads = stpStartInfo._maxWorkerThreads;
_threadPriority = stpStartInfo._threadPriority;
+ _threadPoolName = stpStartInfo._threadPoolName;
_pcInstanceName = stpStartInfo._pcInstanceName;
_stackSize = stpStartInfo._stackSize;
}
@@ -84,6 +91,13 @@ namespace Amib.Threading
set { _threadPriority = value; }
}
+ public virtual string ThreadPoolName
+ {
+ get { return _threadPoolName; }
+ set { _threadPoolName = value; }
+ }
+
+
public string PerformanceCounterInstanceName
{
get { return _pcInstanceName; }
diff --git a/ThirdParty/SmartThreadPool/SmartThreadPool.cs b/ThirdParty/SmartThreadPool/SmartThreadPool.cs
index bd52f62..19a0007 100644
--- a/ThirdParty/SmartThreadPool/SmartThreadPool.cs
+++ b/ThirdParty/SmartThreadPool/SmartThreadPool.cs
@@ -135,6 +135,11 @@ namespace Amib.Threading
///
public const ThreadPriority DefaultThreadPriority = ThreadPriority.Normal;
+ ///
+ /// The default thread pool name
+ ///
+ public const string DefaultThreadPoolName = "SmartThreadPool";
+
#endregion
#region Member Variables
@@ -143,7 +148,7 @@ namespace Amib.Threading
/// Contains the name of this instance of SmartThreadPool.
/// Can be changed by the user.
///
- private string _name = "SmartThreadPool";
+ private string _name = DefaultThreadPoolName;
///
/// Hashtable of all the threads in the thread pool.
@@ -307,6 +312,7 @@ namespace Amib.Threading
private void Initialize()
{
+ Name = _stpStartInfo.ThreadPoolName;
ValidateSTPStartInfo();
if (null != _stpStartInfo.PerformanceCounterInstanceName)
--
cgit v1.1