From 134f86e8d5c414409631b25b8c6f0ee45fbd8631 Mon Sep 17 00:00:00 2001
From: David Walter Seikel
Date: Thu, 3 Nov 2016 21:44:39 +1000
Subject: Initial update to OpenSim 0.8.2.1 source code.
---
ThirdParty/SmartThreadPool/STPStartInfo.cs | 269 ++++++++++++++++++++---------
1 file changed, 184 insertions(+), 85 deletions(-)
(limited to 'ThirdParty/SmartThreadPool/STPStartInfo.cs')
diff --git a/ThirdParty/SmartThreadPool/STPStartInfo.cs b/ThirdParty/SmartThreadPool/STPStartInfo.cs
index fa9ceb4..96fa094 100644
--- a/ThirdParty/SmartThreadPool/STPStartInfo.cs
+++ b/ThirdParty/SmartThreadPool/STPStartInfo.cs
@@ -1,113 +1,212 @@
-// Ami Bar
-// amibar@gmail.com
-
+using System;
using System.Threading;
namespace Amib.Threading
{
- ///
- /// Summary description for STPStartInfo.
- ///
+ ///
+ /// Summary description for STPStartInfo.
+ ///
public class STPStartInfo : WIGStartInfo
{
- ///
- /// Idle timeout in milliseconds.
- /// If a thread is idle for _idleTimeout milliseconds then
- /// it may quit.
- ///
- private int _idleTimeout;
-
- ///
- /// The lower limit of threads in the pool.
- ///
- private int _minWorkerThreads;
-
- ///
- /// The upper limit of threads in the pool.
- ///
- private int _maxWorkerThreads;
-
- ///
- /// The priority of the threads in the pool
- ///
- 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.
- ///
- private string _pcInstanceName;
-
- private int _stackSize;
-
- public STPStartInfo() : base()
+ private int _idleTimeout = SmartThreadPool.DefaultIdleTimeout;
+ private int _minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads;
+ private int _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads;
+#if !(WINDOWS_PHONE)
+ private ThreadPriority _threadPriority = SmartThreadPool.DefaultThreadPriority;
+#endif
+ private string _performanceCounterInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName;
+ private bool _areThreadsBackground = SmartThreadPool.DefaultAreThreadsBackground;
+ private bool _enableLocalPerformanceCounters;
+ private string _threadPoolName = SmartThreadPool.DefaultThreadPoolName;
+ private int? _maxStackSize = SmartThreadPool.DefaultMaxStackSize;
+
+ public STPStartInfo()
{
+ _performanceCounterInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName;
+#if !(WINDOWS_PHONE)
+ _threadPriority = SmartThreadPool.DefaultThreadPriority;
+#endif
+ _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads;
_idleTimeout = SmartThreadPool.DefaultIdleTimeout;
_minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads;
- _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads;
- _threadPriority = SmartThreadPool.DefaultThreadPriority;
- _threadPoolName = SmartThreadPool.DefaultThreadPoolName;
- _pcInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName;
- _stackSize = SmartThreadPool.DefaultStackSize;
}
- public STPStartInfo(STPStartInfo stpStartInfo) : base(stpStartInfo)
+ public STPStartInfo(STPStartInfo stpStartInfo)
+ : base(stpStartInfo)
{
- _idleTimeout = stpStartInfo._idleTimeout;
- _minWorkerThreads = stpStartInfo._minWorkerThreads;
- _maxWorkerThreads = stpStartInfo._maxWorkerThreads;
- _threadPriority = stpStartInfo._threadPriority;
+ _idleTimeout = stpStartInfo.IdleTimeout;
+ _minWorkerThreads = stpStartInfo.MinWorkerThreads;
+ _maxWorkerThreads = stpStartInfo.MaxWorkerThreads;
+#if !(WINDOWS_PHONE)
+ _threadPriority = stpStartInfo.ThreadPriority;
+#endif
+ _performanceCounterInstanceName = stpStartInfo.PerformanceCounterInstanceName;
+ _enableLocalPerformanceCounters = stpStartInfo._enableLocalPerformanceCounters;
_threadPoolName = stpStartInfo._threadPoolName;
- _pcInstanceName = stpStartInfo._pcInstanceName;
- _stackSize = stpStartInfo._stackSize;
+ _areThreadsBackground = stpStartInfo.AreThreadsBackground;
+#if !(_SILVERLIGHT) && !(WINDOWS_PHONE)
+ _apartmentState = stpStartInfo._apartmentState;
+#endif
}
-
- public int IdleTimeout
- {
- get { return _idleTimeout; }
- set { _idleTimeout = value; }
+
+ ///
+ /// Get/Set the idle timeout in milliseconds.
+ /// If a thread is idle (starved) longer than IdleTimeout then it may quit.
+ ///
+ public virtual int IdleTimeout
+ {
+ get { return _idleTimeout; }
+ set
+ {
+ ThrowIfReadOnly();
+ _idleTimeout = value;
+ }
+ }
+
+
+ ///
+ /// Get/Set the lower limit of threads in the pool.
+ ///
+ public virtual int MinWorkerThreads
+ {
+ get { return _minWorkerThreads; }
+ set
+ {
+ ThrowIfReadOnly();
+ _minWorkerThreads = value;
+ }
+ }
+
+
+ ///
+ /// Get/Set the upper limit of threads in the pool.
+ ///
+ public virtual int MaxWorkerThreads
+ {
+ get { return _maxWorkerThreads; }
+ set
+ {
+ ThrowIfReadOnly();
+ _maxWorkerThreads = value;
+ }
+ }
+
+#if !(WINDOWS_PHONE)
+ ///
+ /// Get/Set the scheduling priority of the threads in the pool.
+ /// The Os handles the scheduling.
+ ///
+ public virtual ThreadPriority ThreadPriority
+ {
+ get { return _threadPriority; }
+ set
+ {
+ ThrowIfReadOnly();
+ _threadPriority = value;
+ }
+ }
+#endif
+ ///
+ /// Get/Set the thread pool name. Threads will get names depending on this.
+ ///
+ public virtual string ThreadPoolName {
+ get { return _threadPoolName; }
+ set
+ {
+ ThrowIfReadOnly ();
+ _threadPoolName = value;
+ }
}
- public int MinWorkerThreads
- {
- get { return _minWorkerThreads; }
- set { _minWorkerThreads = value; }
- }
+ ///
+ /// Get/Set the performance counter instance name of this SmartThreadPool
+ /// The default is null which indicate not to use performance counters at all.
+ ///
+ public virtual string PerformanceCounterInstanceName
+ {
+ get { return _performanceCounterInstanceName; }
+ set
+ {
+ ThrowIfReadOnly();
+ _performanceCounterInstanceName = value;
+ }
+ }
- public int MaxWorkerThreads
- {
- get { return _maxWorkerThreads; }
- set { _maxWorkerThreads = value; }
- }
+ ///
+ /// Enable/Disable the local performance counter.
+ /// This enables the user to get some performance information about the SmartThreadPool
+ /// without using Windows performance counters. (Useful on WindowsCE, Silverlight, etc.)
+ /// The default is false.
+ ///
+ public virtual bool EnableLocalPerformanceCounters
+ {
+ get { return _enableLocalPerformanceCounters; }
+ set
+ {
+ ThrowIfReadOnly();
+ _enableLocalPerformanceCounters = value;
+ }
+ }
- public ThreadPriority ThreadPriority
+ ///
+ /// Get/Set backgroundness of thread in thread pool.
+ ///
+ public virtual bool AreThreadsBackground
+ {
+ get { return _areThreadsBackground; }
+ set
+ {
+ ThrowIfReadOnly ();
+ _areThreadsBackground = value;
+ }
+ }
+
+ ///
+ /// Get a readonly version of this STPStartInfo.
+ ///
+ /// Returns a readonly reference to this STPStartInfo
+ public new STPStartInfo AsReadOnly()
{
- get { return _threadPriority; }
- set { _threadPriority = value; }
+ return new STPStartInfo(this) { _readOnly = true };
}
- public virtual string ThreadPoolName
- {
- get { return _threadPoolName; }
- set { _threadPoolName = value; }
- }
+#if !(_SILVERLIGHT) && !(WINDOWS_PHONE)
+ private ApartmentState _apartmentState = SmartThreadPool.DefaultApartmentState;
- public string PerformanceCounterInstanceName
+ ///
+ /// Get/Set the apartment state of threads in the thread pool
+ ///
+ public ApartmentState ApartmentState
{
- get { return _pcInstanceName; }
- set { _pcInstanceName = value; }
- }
-
- public int StackSize
+ get { return _apartmentState; }
+ set
+ {
+ ThrowIfReadOnly();
+ _apartmentState = value;
+ }
+ }
+
+#if !(_SILVERLIGHT) && !(WINDOWS_PHONE)
+
+ ///
+ /// Get/Set the max stack size of threads in the thread pool
+ ///
+ public int? MaxStackSize
{
- get { return _stackSize; }
- set { _stackSize = value; }
+ get { return _maxStackSize; }
+ set
+ {
+ ThrowIfReadOnly();
+ if (value.HasValue && value.Value < 0)
+ {
+ throw new ArgumentOutOfRangeException("value", "Value must be greater than 0.");
+ }
+ _maxStackSize = value;
+ }
}
+#endif
+
+#endif
}
}
--
cgit v1.1