diff options
-rw-r--r-- | OpenSim/Framework/Util.cs | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index c9930fb..ae720f1 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -2081,15 +2081,19 @@ namespace OpenSim.Framework | |||
2081 | try | 2081 | try |
2082 | { | 2082 | { |
2083 | long numRunning = numRunningThreadFuncs; | 2083 | long numRunning = numRunningThreadFuncs; |
2084 | if ((threadFuncOverloadMode == 0) && (numRunning >= m_ThreadPool.MaxThreads)) | 2084 | |
2085 | { | 2085 | if (m_ThreadPool != null) |
2086 | if (Interlocked.CompareExchange(ref threadFuncOverloadMode, 1, 0) == 0) | ||
2087 | m_log.DebugFormat("Threadfunc: enable overload mode (Queued {0}, Running {1})", numQueued, numRunning); | ||
2088 | } | ||
2089 | else if ((threadFuncOverloadMode == 1) && (numRunning <= (m_ThreadPool.MaxThreads*2)/3)) | ||
2090 | { | 2086 | { |
2091 | if (Interlocked.CompareExchange(ref threadFuncOverloadMode, 0, 1) == 1) | 2087 | if ((threadFuncOverloadMode == 0) && (numRunning >= m_ThreadPool.MaxThreads)) |
2092 | m_log.DebugFormat("Threadfunc: disable overload mode (Queued {0}, Running {1})", numQueued, numRunning); | 2088 | { |
2089 | if (Interlocked.CompareExchange(ref threadFuncOverloadMode, 1, 0) == 0) | ||
2090 | m_log.DebugFormat("Threadfunc: enable overload mode (Queued {0}, Running {1})", numQueued, numRunning); | ||
2091 | } | ||
2092 | else if ((threadFuncOverloadMode == 1) && (numRunning <= (m_ThreadPool.MaxThreads * 2) / 3)) | ||
2093 | { | ||
2094 | if (Interlocked.CompareExchange(ref threadFuncOverloadMode, 0, 1) == 1) | ||
2095 | m_log.DebugFormat("Threadfunc: disable overload mode (Queued {0}, Running {1})", numQueued, numRunning); | ||
2096 | } | ||
2093 | } | 2097 | } |
2094 | 2098 | ||
2095 | if (loggingEnabled || (threadFuncOverloadMode == 1)) | 2099 | if (loggingEnabled || (threadFuncOverloadMode == 1)) |
@@ -2325,6 +2329,13 @@ namespace OpenSim.Framework | |||
2325 | /// </summary> | 2329 | /// </summary> |
2326 | public static void RunThreadNoTimeout(WaitCallback callback, string name, object obj) | 2330 | public static void RunThreadNoTimeout(WaitCallback callback, string name, object obj) |
2327 | { | 2331 | { |
2332 | if (FireAndForgetMethod == FireAndForgetMethod.RegressionTest) | ||
2333 | { | ||
2334 | Culture.SetCurrentCulture(); | ||
2335 | callback(obj); | ||
2336 | return; | ||
2337 | } | ||
2338 | |||
2328 | Thread t = new Thread(delegate() | 2339 | Thread t = new Thread(delegate() |
2329 | { | 2340 | { |
2330 | try | 2341 | try |