mirror of
https://github.com/opensim/opensim.git
synced 2026-06-30 02:57:02 +08:00
move inventory fetch work threads to objectjobengine
This commit is contained in:
@@ -98,9 +98,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
|
||||
private static FetchInvDescHandler m_webFetchHandler;
|
||||
|
||||
private static Thread[] m_workerThreads = null;
|
||||
|
||||
private static BlockingCollection<APollRequest> m_queue = new BlockingCollection<APollRequest>();
|
||||
private static ObjectJobEngine m_workerpool = null;
|
||||
|
||||
private static int m_NumberScenes = 0;
|
||||
|
||||
@@ -142,12 +140,13 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
if (!m_Enabled)
|
||||
return;
|
||||
|
||||
m_NumberScenes--;
|
||||
|
||||
Scene.EventManager.OnRegisterCaps -= RegisterCaps;
|
||||
|
||||
StatsManager.DeregisterStat(s_processedRequestsStat);
|
||||
StatsManager.DeregisterStat(s_queuedRequestsStat);
|
||||
|
||||
m_NumberScenes--;
|
||||
Scene = null;
|
||||
}
|
||||
|
||||
@@ -181,7 +180,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
"httpfetch",
|
||||
StatType.Pull,
|
||||
MeasuresOfInterest.AverageChangeOverTime,
|
||||
stat => { stat.Value = m_queue.Count; },
|
||||
stat => { stat.Value = m_workerpool.Count; },
|
||||
StatVerbosity.Debug);
|
||||
|
||||
StatsManager.RegisterStat(s_processedRequestsStat);
|
||||
@@ -200,22 +199,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
|
||||
m_NumberScenes++;
|
||||
|
||||
int nworkers = 2; // was 2
|
||||
if (ProcessQueuedRequestsAsync && m_workerThreads == null)
|
||||
{
|
||||
m_workerThreads = new Thread[nworkers];
|
||||
|
||||
for (uint i = 0; i < nworkers; i++)
|
||||
{
|
||||
m_workerThreads[i] = WorkManager.StartThread(DoInventoryRequests,
|
||||
String.Format("InventoryWorkerThread{0}", i),
|
||||
ThreadPriority.Normal,
|
||||
true,
|
||||
true,
|
||||
null,
|
||||
int.MaxValue);
|
||||
}
|
||||
}
|
||||
if (ProcessQueuedRequestsAsync && m_workerpool == null)
|
||||
m_workerpool = new ObjectJobEngine(DoInventoryRequests, "InventoryWorker",2000,2);
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
@@ -229,13 +214,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
|
||||
if (ProcessQueuedRequestsAsync)
|
||||
{
|
||||
if (m_NumberScenes <= 0 && m_workerThreads != null)
|
||||
if (m_NumberScenes <= 0 && m_workerpool != null)
|
||||
{
|
||||
m_log.DebugFormat("[WebFetchInvDescModule] Closing");
|
||||
foreach (Thread t in m_workerThreads)
|
||||
Watchdog.AbortThread(t.ManagedThreadId);
|
||||
|
||||
m_workerThreads = null;
|
||||
m_workerpool.Dispose();
|
||||
m_workerpool = null;
|
||||
m_badRequests.Dispose();
|
||||
m_badRequests = null;
|
||||
}
|
||||
@@ -303,7 +285,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
reqinfo.thepoll = this;
|
||||
reqinfo.reqID = requestID;
|
||||
reqinfo.request = request;
|
||||
m_queue.Add(reqinfo);
|
||||
m_workerpool.Enqueue(reqinfo);
|
||||
return null;
|
||||
};
|
||||
|
||||
@@ -399,29 +381,13 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||
}
|
||||
}
|
||||
|
||||
private static void DoInventoryRequests()
|
||||
private static void DoInventoryRequests(object o)
|
||||
{
|
||||
bool running = true;
|
||||
while (running)
|
||||
{
|
||||
try
|
||||
{
|
||||
APollRequest poolreq;
|
||||
if (m_queue.TryTake(out poolreq, 4500))
|
||||
{
|
||||
Watchdog.UpdateThread();
|
||||
if (poolreq.thepoll != null)
|
||||
poolreq.thepoll.Process(poolreq);
|
||||
poolreq = null;
|
||||
}
|
||||
Watchdog.UpdateThread();
|
||||
}
|
||||
catch (ThreadAbortException)
|
||||
{
|
||||
Thread.ResetAbort();
|
||||
running = false;
|
||||
}
|
||||
}
|
||||
if(m_NumberScenes <= 0)
|
||||
return;
|
||||
APollRequest poolreq = o as APollRequest;
|
||||
if (poolreq != null && poolreq.thepoll != null)
|
||||
poolreq.thepoll.Process(poolreq);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user