Update svn properties.
parent
640ad259d4
commit
0103c43697
|
@ -1,106 +1,106 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace OpenSim.Framework
|
namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
public static class ThreadTracker
|
public static class ThreadTracker
|
||||||
{
|
{
|
||||||
public static List<ThreadTrackerItem> m_Threads;
|
public static List<ThreadTrackerItem> m_Threads;
|
||||||
public static System.Threading.Thread ThreadTrackerThread;
|
public static System.Threading.Thread ThreadTrackerThread;
|
||||||
private static readonly long ThreadTimeout = 30 * 10000000;
|
private static readonly long ThreadTimeout = 30 * 10000000;
|
||||||
|
|
||||||
static ThreadTracker()
|
static ThreadTracker()
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
m_Threads = new List<ThreadTrackerItem>();
|
m_Threads = new List<ThreadTrackerItem>();
|
||||||
ThreadTrackerThread = new Thread(ThreadTrackerThreadLoop);
|
ThreadTrackerThread = new Thread(ThreadTrackerThreadLoop);
|
||||||
ThreadTrackerThread.Name = "ThreadTrackerThread";
|
ThreadTrackerThread.Name = "ThreadTrackerThread";
|
||||||
ThreadTrackerThread.IsBackground = true;
|
ThreadTrackerThread.IsBackground = true;
|
||||||
ThreadTrackerThread.Priority = System.Threading.ThreadPriority.BelowNormal;
|
ThreadTrackerThread.Priority = System.Threading.ThreadPriority.BelowNormal;
|
||||||
ThreadTrackerThread.Start();
|
ThreadTrackerThread.Start();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ThreadTrackerThreadLoop()
|
private static void ThreadTrackerThreadLoop()
|
||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Thread.Sleep(5000);
|
Thread.Sleep(5000);
|
||||||
CleanUp();
|
CleanUp();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Add(System.Threading.Thread thread)
|
public static void Add(System.Threading.Thread thread)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
lock (m_Threads)
|
lock (m_Threads)
|
||||||
{
|
{
|
||||||
ThreadTrackerItem tti = new ThreadTrackerItem();
|
ThreadTrackerItem tti = new ThreadTrackerItem();
|
||||||
tti.Thread = thread;
|
tti.Thread = thread;
|
||||||
tti.LastSeenActive = DateTime.Now.Ticks;
|
tti.LastSeenActive = DateTime.Now.Ticks;
|
||||||
m_Threads.Add(tti);
|
m_Threads.Add(tti);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Remove(System.Threading.Thread thread)
|
public static void Remove(System.Threading.Thread thread)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
lock (m_Threads)
|
lock (m_Threads)
|
||||||
{
|
{
|
||||||
foreach (ThreadTrackerItem tti in new ArrayList(m_Threads))
|
foreach (ThreadTrackerItem tti in new ArrayList(m_Threads))
|
||||||
{
|
{
|
||||||
if (tti.Thread == thread)
|
if (tti.Thread == thread)
|
||||||
m_Threads.Remove(tti);
|
m_Threads.Remove(tti);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CleanUp()
|
public static void CleanUp()
|
||||||
{
|
{
|
||||||
lock (m_Threads)
|
lock (m_Threads)
|
||||||
{
|
{
|
||||||
foreach (ThreadTrackerItem tti in new ArrayList(m_Threads))
|
foreach (ThreadTrackerItem tti in new ArrayList(m_Threads))
|
||||||
{
|
{
|
||||||
if (tti.Thread.IsAlive)
|
if (tti.Thread.IsAlive)
|
||||||
{
|
{
|
||||||
// Its active
|
// Its active
|
||||||
tti.LastSeenActive = DateTime.Now.Ticks;
|
tti.LastSeenActive = DateTime.Now.Ticks;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Its not active -- if its expired then remove it
|
// Its not active -- if its expired then remove it
|
||||||
if (tti.LastSeenActive + ThreadTimeout < DateTime.Now.Ticks)
|
if (tti.LastSeenActive + ThreadTimeout < DateTime.Now.Ticks)
|
||||||
m_Threads.Remove(tti);
|
m_Threads.Remove(tti);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Thread> GetThreads()
|
public static List<Thread> GetThreads()
|
||||||
{
|
{
|
||||||
if (m_Threads == null)
|
if (m_Threads == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
List<Thread> threads = new List<Thread>();
|
List<Thread> threads = new List<Thread>();
|
||||||
lock (m_Threads)
|
lock (m_Threads)
|
||||||
{
|
{
|
||||||
foreach (ThreadTrackerItem tti in new ArrayList(m_Threads))
|
foreach (ThreadTrackerItem tti in new ArrayList(m_Threads))
|
||||||
{
|
{
|
||||||
threads.Add(tti.Thread);
|
threads.Add(tti.Thread);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return threads;
|
return threads;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ThreadTrackerItem
|
public class ThreadTrackerItem
|
||||||
{
|
{
|
||||||
public System.Threading.Thread Thread;
|
public System.Threading.Thread Thread;
|
||||||
public long LastSeenActive;
|
public long LastSeenActive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue