Mantis#1648. Thank you, Melanie for a patch that:
Fix a script Xengine deadlock/hang if llResetScript is used in changed()0.6.0-stable
parent
d40bea4a8e
commit
7580fa5c0a
|
@ -50,6 +50,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
|
||||||
|
|
||||||
bool PostScriptEvent(LLUUID itemID, EventParams parms);
|
bool PostScriptEvent(LLUUID itemID, EventParams parms);
|
||||||
bool PostObjectEvent(uint localID, EventParams parms);
|
bool PostObjectEvent(uint localID, EventParams parms);
|
||||||
|
void ApiResetScript(LLUUID itemID);
|
||||||
void ResetScript(LLUUID itemID);
|
void ResetScript(LLUUID itemID);
|
||||||
void SetScriptState(LLUUID itemID, bool state);
|
void SetScriptState(LLUUID itemID, bool state);
|
||||||
bool GetScriptState(LLUUID itemID);
|
bool GetScriptState(LLUUID itemID);
|
||||||
|
|
|
@ -2767,7 +2767,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llResetScript()
|
public void llResetScript()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
m_ScriptEngine.ResetScript(m_itemID);
|
m_ScriptEngine.ApiResetScript(m_itemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llMessageLinked(int linknum, int num, string msg, string id)
|
public void llMessageLinked(int linknum, int num, string msg, string id)
|
||||||
|
|
|
@ -779,6 +779,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ApiResetScript(LLUUID itemID)
|
||||||
|
{
|
||||||
|
XScriptInstance instance = GetInstance(itemID);
|
||||||
|
if (instance != null)
|
||||||
|
instance.ApiResetScript();
|
||||||
|
}
|
||||||
|
|
||||||
public void ResetScript(LLUUID itemID)
|
public void ResetScript(LLUUID itemID)
|
||||||
{
|
{
|
||||||
XScriptInstance instance = GetInstance(itemID);
|
XScriptInstance instance = GetInstance(itemID);
|
||||||
|
@ -1270,8 +1277,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_CurrentEvent = data.EventName;
|
|
||||||
// m_Engine.Log.DebugFormat("[XEngine] Processed event {0}", data.EventName);
|
|
||||||
SceneObjectPart part = m_Engine.World.GetSceneObjectPart(
|
SceneObjectPart part = m_Engine.World.GetSceneObjectPart(
|
||||||
m_LocalID);
|
m_LocalID);
|
||||||
// m_Engine.Log.DebugFormat("[XEngine] Delivered event {2} in state {3} to {0}.{1}",
|
// m_Engine.Log.DebugFormat("[XEngine] Delivered event {2} in state {3} to {0}.{1}",
|
||||||
|
@ -1279,10 +1284,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
m_CurrentEvent = data.EventName;
|
||||||
m_EventStart = DateTime.Now;
|
m_EventStart = DateTime.Now;
|
||||||
m_InEvent = true;
|
m_InEvent = true;
|
||||||
|
|
||||||
m_Executor.ExecuteEvent(State, data.EventName, data.Params);
|
m_Executor.ExecuteEvent(State, data.EventName, data.Params);
|
||||||
|
|
||||||
m_InEvent = false;
|
m_InEvent = false;
|
||||||
|
m_CurrentEvent = String.Empty;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -1358,6 +1367,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
bool running = Running;
|
bool running = Running;
|
||||||
|
|
||||||
|
RemoveState();
|
||||||
|
|
||||||
Stop(0);
|
Stop(0);
|
||||||
m_Engine.m_AsyncCommands.RemoveScript(m_LocalID, m_ItemID);
|
m_Engine.m_AsyncCommands.RemoveScript(m_LocalID, m_ItemID);
|
||||||
m_EventQueue.Clear();
|
m_EventQueue.Clear();
|
||||||
|
@ -1365,6 +1376,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
m_State = "default";
|
m_State = "default";
|
||||||
if (running)
|
if (running)
|
||||||
Start();
|
Start();
|
||||||
|
PostEvent(new EventParams("state_entry",
|
||||||
|
new Object[0], new DetectParams[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ApiResetScript()
|
||||||
|
{
|
||||||
|
bool running = Running;
|
||||||
|
|
||||||
|
RemoveState();
|
||||||
|
|
||||||
|
m_Script.ResetVars();
|
||||||
|
m_Engine.m_AsyncCommands.RemoveScript(m_LocalID, m_ItemID);
|
||||||
if(m_CurrentEvent != "state_entry")
|
if(m_CurrentEvent != "state_entry")
|
||||||
{
|
{
|
||||||
PostEvent(new EventParams("state_entry",
|
PostEvent(new EventParams("state_entry",
|
||||||
|
|
Loading…
Reference in New Issue