Update svn properties.

ThreadPoolClientBranch
Jeff Ames 2008-02-21 15:14:39 +00:00
parent 640ad259d4
commit 0103c43697
1 changed files with 106 additions and 106 deletions

View File

@ -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;
} }
} }
} }