Fixes Mantis #3289. Thank you kindly, Ewe Loon, for a patch that:
fixes Sporadic Errors in "Dictionary<InstanceData, DetectParams[]" Causing total script Failure0.6.5-rc1
parent
95323c3264
commit
9e4d9e2c3f
|
@ -500,16 +500,33 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
internal void ExecuteEvent(uint localID, UUID itemID,
|
internal void ExecuteEvent(uint localID, UUID itemID,
|
||||||
string FunctionName, DetectParams[] qParams, object[] args)
|
string FunctionName, DetectParams[] qParams, object[] args)
|
||||||
{
|
{
|
||||||
InstanceData id = GetScript(localID, itemID);
|
int ExeStage=0; // ;^) Ewe Loon, for debuging
|
||||||
|
InstanceData id=null;
|
||||||
|
try // ;^) Ewe Loon,fix
|
||||||
|
{ // ;^) Ewe Loon,fix
|
||||||
|
ExeStage = 1; // ;^) Ewe Loon, for debuging
|
||||||
|
id = GetScript(localID, itemID);
|
||||||
if (id == null)
|
if (id == null)
|
||||||
return;
|
return;
|
||||||
|
ExeStage = 2; // ;^) Ewe Loon, for debuging
|
||||||
|
if (qParams.Length>0) // ;^) Ewe Loon,fix
|
||||||
detparms[id] = qParams;
|
detparms[id] = qParams;
|
||||||
|
ExeStage = 3; // ;^) Ewe Loon, for debuging
|
||||||
if (id.Running)
|
if (id.Running)
|
||||||
id.Script.ExecuteEvent(id.State, FunctionName, args);
|
id.Script.ExecuteEvent(id.State, FunctionName, args);
|
||||||
|
ExeStage = 4; // ;^) Ewe Loon, for debuging
|
||||||
|
if (qParams.Length>0) // ;^) Ewe Loon,fix
|
||||||
detparms.Remove(id);
|
detparms.Remove(id);
|
||||||
|
ExeStage = 5; // ;^) Ewe Loon, for debuging
|
||||||
|
}
|
||||||
|
catch (Exception e) // ;^) Ewe Loon, From here down tis fix
|
||||||
|
{
|
||||||
|
if ((ExeStage == 3)&&(qParams.Length>0))
|
||||||
|
detparms.Remove(id);
|
||||||
|
SceneObjectPart ob = m_scriptEngine.World.GetSceneObjectPart(localID);
|
||||||
|
m_log.InfoFormat("[Script Error] ,{0},{1},@{2},{3},{4},{5}", ob.Name , FunctionName, ExeStage, e.Message, qParams.Length, detparms.Count);
|
||||||
|
if (ExeStage != 2) throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetLocalID(UUID itemID)
|
public uint GetLocalID(UUID itemID)
|
||||||
|
@ -569,6 +586,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
|
|
||||||
Dictionary<UUID, InstanceData> Obj;
|
Dictionary<UUID, InstanceData> Obj;
|
||||||
Scripts.TryGetValue(localID, out Obj);
|
Scripts.TryGetValue(localID, out Obj);
|
||||||
|
if (Obj==null) return null;
|
||||||
if (Obj.ContainsKey(itemID) == false)
|
if (Obj.ContainsKey(itemID) == false)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue