From 0aaf0c45659939b2e08fd750a55c598615e6fdc9 Mon Sep 17 00:00:00 2001 From: Charles Krinke Date: Tue, 1 Jul 2008 13:42:47 +0000 Subject: Mantis#1640. Thank you, Chernega for a patch that addresses: It would appear that calling llResetScript() in state_entry() causes deadlock of region. Probably due to llResetScript calling state_entry again. llResetScript should see who called it, and not recall state_entry() after a state/variable reset. Once this script is in a prim, the region/world/debug/script window shows it consuming the server (from 2,400 to 800,000 milliseconds). --- OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 7f539f3..b6f7fbc 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs @@ -866,6 +866,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine private string m_ScriptName; private string m_Assembly; private int m_StartParam = 0; + private string m_CurrentEvent = String.Empty; private Dictionary m_Apis = new Dictionary(); @@ -1269,6 +1270,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine } else { + m_CurrentEvent = data.EventName; // m_Engine.Log.DebugFormat("[XEngine] Processed event {0}", data.EventName); SceneObjectPart part = m_Engine.World.GetSceneObjectPart( m_LocalID); @@ -1363,8 +1365,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine m_State = "default"; if (running) Start(); - PostEvent(new EventParams("state_entry", - new Object[0], new DetectParams[0])); + if(m_CurrentEvent != "state_entry") + { + PostEvent(new EventParams("state_entry", + new Object[0], new DetectParams[0])); + } } public Dictionary GetVars() -- cgit v1.1