From ca35b49b7043b6625e3fb02f0bfdd23bd3f16ae2 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Thu, 13 Nov 2008 19:00:46 +0000 Subject: Make scripts in objects rezzed from script compile synchronously to close a timing gap. Still not 100%, but getting there --- .../ScriptEngine/Interfaces/IScriptInstance.cs | 3 +- OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 47 ++++++---------------- 2 files changed, 14 insertions(+), 36 deletions(-) (limited to 'OpenSim/Region/ScriptEngine') diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs index f615250..dbcc4ed 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs @@ -39,7 +39,8 @@ namespace OpenSim.Region.ScriptEngine.Interfaces public enum StateSource { NewRez = 0, - PrimCrossing = 1 + PrimCrossing = 1, + ScriptedRez= 2 } public interface IScriptWorkItem diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 6584bb3..e5dfb2b 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs @@ -77,7 +77,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine #pragma warning restore 414 private int m_EventLimit; private bool m_KillTimedOutScripts; -// bool m_firstStart = true; private static List m_ScriptEngines = new List(); @@ -390,46 +389,24 @@ namespace OpenSim.Region.ScriptEngine.XEngine Object[] parms = new Object[]{localID, itemID, script, startParam, postOnRez, (StateSource)stateSource}; - lock (m_CompileQueue) + if (stateSource == (int)StateSource.ScriptedRez) { - m_CompileQueue.Enqueue(parms); - - if (m_CurrentCompile == null) - { -// if (m_firstStart) -// { -// m_firstStart = false; -// m_CurrentCompile = m_ThreadPool.QueueWorkItem( -// new WorkItemCallback(this.DoScriptWait), -// new Object[0]); -// return; -// } - - m_CurrentCompile = m_ThreadPool.QueueWorkItem( - new WorkItemCallback(this.DoOnRezScriptQueue), - new Object[0]); - } + DoOnRezScript(parms); } - } - - public Object DoScriptWait(Object dummy) - { - Thread.Sleep(10000); - - lock (m_CompileQueue) + else { - if (m_CompileQueue.Count > 0) + lock (m_CompileQueue) { - m_CurrentCompile = m_ThreadPool.QueueWorkItem( - new WorkItemCallback(this.DoOnRezScriptQueue), - new Object[0]); - } - else - { - m_CurrentCompile = null; + m_CompileQueue.Enqueue(parms); + + if (m_CurrentCompile == null) + { + m_CurrentCompile = m_ThreadPool.QueueWorkItem( + new WorkItemCallback(this.DoOnRezScriptQueue), + new Object[0]); + } } } - return null; } public Object DoOnRezScriptQueue(Object dummy) -- cgit v1.1