diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/EventQueueManager.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/EventQueueManager.cs index ec34bb077c..c2a4b88696 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/EventQueueManager.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/EventQueueManager.cs @@ -42,11 +42,26 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine [Serializable] class EventQueueManager { + /// + /// List of threads processing event queue + /// private List EventQueueThreads = new List(); - private object QueueLock = new object(); + private object QueueLock = new object(); // Mutex lock object + /// + /// How many ms to sleep if queue is empty + /// private int NothingToDoSleepms = 50; + /// + /// How many threads to process queue with + /// private int NumberOfThreads = 2; + /// + /// Queue containing events waiting to be executed + /// private Queue EventQueue = new Queue(); + /// + /// Queue item structure + /// private struct QueueItemStruct { public IScriptHost ObjectID; @@ -55,13 +70,20 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine public object[] param; } + /// + /// List of ObjectID locks for mutex processing of script events + /// + private List ObjectLocks = new List(); + private object TryLockLock = new object(); // Mutex lock object + private ScriptEngine myScriptEngine; public EventQueueManager(ScriptEngine _ScriptEngine) { myScriptEngine = _ScriptEngine; - //myScriptEngine.m_logger.Verbose("ScriptEngine", "EventQueueManager Start"); - // Start worker thread + // + // Start event queue processing threads (worker threads) + // for (int ThreadCount = 0; ThreadCount <= NumberOfThreads; ThreadCount++) { Thread EventQueueThread = new Thread(EventQueueThreadLoop); @@ -92,9 +114,13 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine } EventQueueThreads.Clear(); // Todo: Clean up our queues + EventQueue.Clear(); } + /// + /// Queue processing thread loop + /// private void EventQueueThreadLoop() { //myScriptEngine.m_logger.Verbose("ScriptEngine", "EventQueueManager Worker thread spawned"); @@ -156,8 +182,11 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine } } - private List ObjectLocks = new List(); - private object TryLockLock = new object(); + /// + /// Try to get a mutex lock on ObjectID + /// + /// + /// private bool TryLock(IScriptHost ObjectID) { lock (TryLockLock) @@ -174,6 +203,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine } } + /// + /// Release mutex lock on ObjectID + /// + /// private void ReleaseLock(IScriptHost ObjectID) { lock (TryLockLock) @@ -185,6 +218,12 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine } } + /// + /// Add event to event execution queue + /// + /// + /// Name of the function, will be state + "_event_" + FunctionName + /// Array of parameters to match event mask public void AddToObjectQueue(IScriptHost ObjectID, string FunctionName, object[] param) { // Determine all scripts in Object and add to their queue @@ -210,10 +249,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine } } - //public void AddToScriptQueue(string ObjectID, string FunctionName, object[] param) - //{ - // // Add to script queue - //} + } } diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs index 4879fb2d04..07d5d54291 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs @@ -184,9 +184,9 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine before = GC.GetTotalMemory(true); Script = m_scriptEngine.myAppDomainManager.LoadScript(FileName); Console.WriteLine("Script occupies {0} bytes", GC.GetTotalMemory(true) - before); - before = GC.GetTotalMemory(true); - Script = m_scriptEngine.myAppDomainManager.LoadScript(FileName); - Console.WriteLine("Script occupies {0} bytes", GC.GetTotalMemory(true) - before); + //before = GC.GetTotalMemory(true); + //Script = m_scriptEngine.myAppDomainManager.LoadScript(FileName); + //Console.WriteLine("Script occupies {0} bytes", GC.GetTotalMemory(true) - before); // Add it to our temporary active script keeper