aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJohn Hurliman2009-10-22 10:37:11 -0700
committerJohn Hurliman2009-10-22 10:37:11 -0700
commit6ca4b0f36622833688136e9ace7d5545063293ba (patch)
treec6796560b841ec83351304f1ff7afca52b493621
parentOpenSim.ini.example had the wrong names for default values in the [InterestMa... (diff)
downloadopensim-SC-6ca4b0f36622833688136e9ace7d5545063293ba.zip
opensim-SC-6ca4b0f36622833688136e9ace7d5545063293ba.tar.gz
opensim-SC-6ca4b0f36622833688136e9ace7d5545063293ba.tar.bz2
opensim-SC-6ca4b0f36622833688136e9ace7d5545063293ba.tar.xz
* Added a check if Util.m_ThreadPool is null before trying to use it, and if so initialize it to sane defaults
* Simplified the InitThreadPool() function
-rw-r--r--OpenSim/Framework/Util.cs20
1 files changed, 7 insertions, 13 deletions
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 167e34d..a18a827 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -1324,18 +1324,10 @@ namespace OpenSim.Framework
1324 { 1324 {
1325 if (maxThreads < 2) 1325 if (maxThreads < 2)
1326 throw new ArgumentOutOfRangeException("maxThreads", "maxThreads must be greater than 2"); 1326 throw new ArgumentOutOfRangeException("maxThreads", "maxThreads must be greater than 2");
1327
1328 if (m_ThreadPool != null) 1327 if (m_ThreadPool != null)
1329 return; 1328 throw new InvalidOperationException("SmartThreadPool is already initialized");
1330
1331 STPStartInfo startInfo = new STPStartInfo();
1332 startInfo.IdleTimeout = 2000; // 2 seconds
1333 startInfo.MaxWorkerThreads = maxThreads;
1334 startInfo.MinWorkerThreads = 2;
1335 startInfo.ThreadPriority = ThreadPriority.Normal;
1336 startInfo.StartSuspended = false;
1337 1329
1338 m_ThreadPool = new SmartThreadPool(startInfo); 1330 m_ThreadPool = new SmartThreadPool(2000, maxThreads, 2);
1339 } 1331 }
1340 1332
1341 public static void FireAndForget(System.Threading.WaitCallback callback, object obj) 1333 public static void FireAndForget(System.Threading.WaitCallback callback, object obj)
@@ -1343,20 +1335,22 @@ namespace OpenSim.Framework
1343 switch (FireAndForgetMethod) 1335 switch (FireAndForgetMethod)
1344 { 1336 {
1345 case FireAndForgetMethod.UnsafeQueueUserWorkItem: 1337 case FireAndForgetMethod.UnsafeQueueUserWorkItem:
1346 System.Threading.ThreadPool.UnsafeQueueUserWorkItem(callback, obj); 1338 ThreadPool.UnsafeQueueUserWorkItem(callback, obj);
1347 break; 1339 break;
1348 case FireAndForgetMethod.QueueUserWorkItem: 1340 case FireAndForgetMethod.QueueUserWorkItem:
1349 System.Threading.ThreadPool.QueueUserWorkItem(callback, obj); 1341 ThreadPool.QueueUserWorkItem(callback, obj);
1350 break; 1342 break;
1351 case FireAndForgetMethod.BeginInvoke: 1343 case FireAndForgetMethod.BeginInvoke:
1352 FireAndForgetWrapper wrapper = Singleton.GetInstance<FireAndForgetWrapper>(); 1344 FireAndForgetWrapper wrapper = Singleton.GetInstance<FireAndForgetWrapper>();
1353 wrapper.FireAndForget(callback, obj); 1345 wrapper.FireAndForget(callback, obj);
1354 break; 1346 break;
1355 case FireAndForgetMethod.SmartThreadPool: 1347 case FireAndForgetMethod.SmartThreadPool:
1348 if (m_ThreadPool != null)
1349 m_ThreadPool = new SmartThreadPool(2000, 15, 2);
1356 m_ThreadPool.QueueWorkItem(delegate(object o) { callback(o); return null; }, obj); 1350 m_ThreadPool.QueueWorkItem(delegate(object o) { callback(o); return null; }, obj);
1357 break; 1351 break;
1358 case FireAndForgetMethod.Thread: 1352 case FireAndForgetMethod.Thread:
1359 System.Threading.Thread thread = new System.Threading.Thread(delegate(object o) { callback(o); }); 1353 Thread thread = new Thread(delegate(object o) { callback(o); });
1360 thread.Start(obj); 1354 thread.Start(obj);
1361 break; 1355 break;
1362 default: 1356 default: