diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/XEngine/XEngine.cs')
-rw-r--r-- | OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 30ce79b..fc76d0b 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -71,6 +71,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
71 | private ThreadPriority m_Prio; | 71 | private ThreadPriority m_Prio; |
72 | private bool m_Enabled = false; | 72 | private bool m_Enabled = false; |
73 | private bool m_InitialStartup = true; | 73 | private bool m_InitialStartup = true; |
74 | private int m_ScriptFailCount; // Number of script fails since compile queue was last empty | ||
75 | private string m_ScriptErrorMessage; | ||
74 | 76 | ||
75 | // disable warning: need to keep a reference to XEngine.EventManager | 77 | // disable warning: need to keep a reference to XEngine.EventManager |
76 | // alive to avoid it being garbage collected | 78 | // alive to avoid it being garbage collected |
@@ -149,6 +151,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
149 | public void Initialise(Scene scene, IConfigSource configSource) | 151 | public void Initialise(Scene scene, IConfigSource configSource) |
150 | { | 152 | { |
151 | m_ScriptConfig = configSource.Configs["XEngine"]; | 153 | m_ScriptConfig = configSource.Configs["XEngine"]; |
154 | m_ScriptFailCount = 0; | ||
155 | m_ScriptErrorMessage = String.Empty; | ||
152 | 156 | ||
153 | if (m_ScriptConfig == null) | 157 | if (m_ScriptConfig == null) |
154 | { | 158 | { |
@@ -417,6 +421,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
417 | { | 421 | { |
418 | m_InitialStartup = false; | 422 | m_InitialStartup = false; |
419 | System.Threading.Thread.Sleep(15000); | 423 | System.Threading.Thread.Sleep(15000); |
424 | lock (m_CompileQueue) | ||
425 | { | ||
426 | if (m_CompileQueue.Count==0) | ||
427 | // No scripts on region, so won't get triggered later | ||
428 | // by the queue becoming empty so we trigger it here | ||
429 | m_Scene.EventManager.TriggerEmptyScriptCompileQueue(0, String.Empty); | ||
430 | } | ||
420 | } | 431 | } |
421 | 432 | ||
422 | Object o; | 433 | Object o; |
@@ -443,6 +454,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
443 | else | 454 | else |
444 | { | 455 | { |
445 | m_CurrentCompile = null; | 456 | m_CurrentCompile = null; |
457 | m_Scene.EventManager.TriggerEmptyScriptCompileQueue(m_ScriptFailCount, | ||
458 | m_ScriptErrorMessage); | ||
459 | m_ScriptFailCount = 0; | ||
446 | } | 460 | } |
447 | } | 461 | } |
448 | return null; | 462 | return null; |
@@ -468,12 +482,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
468 | if (part == null) | 482 | if (part == null) |
469 | { | 483 | { |
470 | Log.Error("[Script] SceneObjectPart unavailable. Script NOT started."); | 484 | Log.Error("[Script] SceneObjectPart unavailable. Script NOT started."); |
485 | m_ScriptErrorMessage += "SceneObjectPart unavailable. Script NOT started.\n"; | ||
486 | m_ScriptFailCount++; | ||
471 | return false; | 487 | return false; |
472 | } | 488 | } |
473 | 489 | ||
474 | TaskInventoryItem item = part.Inventory.GetInventoryItem(itemID); | 490 | TaskInventoryItem item = part.Inventory.GetInventoryItem(itemID); |
475 | if (item == null) | 491 | if (item == null) |
492 | { | ||
493 | m_ScriptErrorMessage += "Can't find script inventory item.\n"; | ||
494 | m_ScriptFailCount++; | ||
476 | return false; | 495 | return false; |
496 | } | ||
477 | 497 | ||
478 | UUID assetID = item.AssetID; | 498 | UUID assetID = item.AssetID; |
479 | 499 | ||
@@ -499,6 +519,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
499 | try | 519 | try |
500 | { | 520 | { |
501 | // DISPLAY ERROR INWORLD | 521 | // DISPLAY ERROR INWORLD |
522 | m_ScriptErrorMessage += "Failed to compile: " + e.Message.ToString(); | ||
523 | m_ScriptFailCount++; | ||
502 | string text = "Error compiling script:\n" + e.Message.ToString(); | 524 | string text = "Error compiling script:\n" + e.Message.ToString(); |
503 | if (text.Length > 1000) | 525 | if (text.Length > 1000) |
504 | text = text.Substring(0, 1000); | 526 | text = text.Substring(0, 1000); |
@@ -567,6 +589,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
567 | catch (Exception e) | 589 | catch (Exception e) |
568 | { | 590 | { |
569 | m_log.ErrorFormat("[XEngine] Exception creating app domain:\n {0}", e.ToString()); | 591 | m_log.ErrorFormat("[XEngine] Exception creating app domain:\n {0}", e.ToString()); |
592 | m_ScriptErrorMessage += "Exception creating app domain:\n"; | ||
593 | m_ScriptFailCount++; | ||
570 | return false; | 594 | return false; |
571 | } | 595 | } |
572 | } | 596 | } |