Maintenance thread in charge of loading/unloading of scripts. 1 thread less per region.

Total so far: 2 threads less per region
Note: Currently causes delay in load/unload of scripts
afrisby-rexmerge
Tedd Hansen 2008-02-22 13:23:45 +00:00
parent 9f7366210a
commit 3bb0fe098f
2 changed files with 28 additions and 17 deletions

View File

@ -168,6 +168,11 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
Last_maxFunctionExecutionTimens = DateTime.Now.Ticks; // Reset time
}
}
// LOAD / UNLOAD SCRIPTS
if (m_ScriptEngine.m_ScriptManager != null)
m_ScriptEngine.m_ScriptManager.DoScriptLoadUnload();
}
}
}

View File

@ -129,14 +129,14 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
if (PrivateThread)
{
// Assign one thread per region
scriptLoadUnloadThread = StartScriptLoadUnloadThread();
//scriptLoadUnloadThread = StartScriptLoadUnloadThread();
}
else
{
// Shared thread - make sure one exist, then assign it to the private
if (staticScriptLoadUnloadThread == null)
{
staticScriptLoadUnloadThread = StartScriptLoadUnloadThread();
//staticScriptLoadUnloadThread = StartScriptLoadUnloadThread();
}
scriptLoadUnloadThread = staticScriptLoadUnloadThread;
}
@ -196,21 +196,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
Thread.Sleep(scriptLoadUnloadThread_IdleSleepms);
//if (PleaseShutdown)
// return;
if (LUQueue.Count > 0)
{
LUStruct item = LUQueue.Dequeue();
lock (startStopLock) // Lock so we have only 1 thread working on loading/unloading of scripts
{
if (item.Action == LUType.Unload)
{
_StopScript(item.localID, item.itemID);
}
if (item.Action == LUType.Load)
{
_StartScript(item.localID, item.itemID, item.script);
}
}
}
DoScriptLoadUnload();
}
}
catch (ThreadAbortException tae)
@ -221,6 +207,26 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
}
}
public void DoScriptLoadUnload()
{
if (LUQueue.Count > 0)
{
LUStruct item = LUQueue.Dequeue();
lock (startStopLock) // Lock so we have only 1 thread working on loading/unloading of scripts
{
if (item.Action == LUType.Unload)
{
_StopScript(item.localID, item.itemID);
}
if (item.Action == LUType.Load)
{
_StartScript(item.localID, item.itemID, item.script);
}
}
}
}
#endregion
#region Helper functions