aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/Servers/BaseOpenSimServer.cs26
-rw-r--r--OpenSim/Framework/Watchdog.cs14
2 files changed, 22 insertions, 18 deletions
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index f0f8d01..cbab2db 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -37,6 +37,7 @@ using log4net;
37using log4net.Appender; 37using log4net.Appender;
38using log4net.Core; 38using log4net.Core;
39using log4net.Repository; 39using log4net.Repository;
40using OpenSim.Framework;
40using OpenSim.Framework.Console; 41using OpenSim.Framework.Console;
41using OpenSim.Framework.Servers; 42using OpenSim.Framework.Servers;
42using OpenSim.Framework.Servers.HttpServer; 43using OpenSim.Framework.Servers.HttpServer;
@@ -234,26 +235,19 @@ namespace OpenSim.Framework.Servers
234 protected string GetThreadsReport() 235 protected string GetThreadsReport()
235 { 236 {
236 StringBuilder sb = new StringBuilder(); 237 StringBuilder sb = new StringBuilder();
238 Watchdog.ThreadWatchdogInfo[] threads = Watchdog.GetThreads();
237 239
238 ProcessThreadCollection threads = ThreadTracker.GetThreads(); 240 sb.Append(threads.Length + " threads are being tracked:" + Environment.NewLine);
239 if (threads == null) 241 foreach (Watchdog.ThreadWatchdogInfo twi in threads)
240 { 242 {
241 sb.Append("OpenSim thread tracking is only enabled in DEBUG mode."); 243 Thread t = twi.Thread;
244
245 sb.Append(
246 "ID: " + t.ManagedThreadId + ", Name: " + t.Name + ", TimeRunning: "
247 + "Pri: " + t.Priority + ", State: " + t.ThreadState);
248 sb.Append(Environment.NewLine);
242 } 249 }
243 else
244 {
245 sb.Append(threads.Count + " threads are being tracked:" + Environment.NewLine);
246 foreach (ProcessThread t in threads)
247 {
248 sb.Append("ID: " + t.Id + ", TotalProcessorTime: " + t.TotalProcessorTime + ", TimeRunning: " +
249 (DateTime.Now - t.StartTime) + ", Pri: " + t.CurrentPriority + ", State: " + t.ThreadState);
250 if (t.ThreadState == System.Diagnostics.ThreadState.Wait)
251 sb.Append(", Reason: " + t.WaitReason + Environment.NewLine);
252 else
253 sb.Append(Environment.NewLine);
254 250
255 }
256 }
257 int workers = 0, ports = 0, maxWorkers = 0, maxPorts = 0; 251 int workers = 0, ports = 0, maxWorkers = 0, maxPorts = 0;
258 ThreadPool.GetAvailableThreads(out workers, out ports); 252 ThreadPool.GetAvailableThreads(out workers, out ports);
259 ThreadPool.GetMaxThreads(out maxWorkers, out maxPorts); 253 ThreadPool.GetMaxThreads(out maxWorkers, out maxPorts);
diff --git a/OpenSim/Framework/Watchdog.cs b/OpenSim/Framework/Watchdog.cs
index 5d46905..0f34e83 100644
--- a/OpenSim/Framework/Watchdog.cs
+++ b/OpenSim/Framework/Watchdog.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -27,6 +27,7 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Linq;
30using System.Threading; 31using System.Threading;
31using log4net; 32using log4net;
32 33
@@ -43,7 +44,7 @@ namespace OpenSim.Framework
43 const int WATCHDOG_TIMEOUT_MS = 5000; 44 const int WATCHDOG_TIMEOUT_MS = 5000;
44 45
45 [System.Diagnostics.DebuggerDisplay("{Thread.Name}")] 46 [System.Diagnostics.DebuggerDisplay("{Thread.Name}")]
46 private class ThreadWatchdogInfo 47 public class ThreadWatchdogInfo
47 { 48 {
48 public Thread Thread; 49 public Thread Thread;
49 public int LastTick; 50 public int LastTick;
@@ -149,6 +150,15 @@ namespace OpenSim.Framework
149 } 150 }
150 catch { } 151 catch { }
151 } 152 }
153
154 /// <summary>
155 /// Get currently watched threads for diagnostic purposes
156 /// </summary>
157 /// <returns></returns>
158 public static ThreadWatchdogInfo[] GetThreads()
159 {
160 return m_threads.Values.ToArray();
161 }
152 162
153 private static void WatchdogTimerElapsed(object sender, System.Timers.ElapsedEventArgs e) 163 private static void WatchdogTimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
154 { 164 {