diff options
4 files changed, 29 insertions, 2 deletions
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs index c2b07fc..b850227 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs | |||
@@ -96,6 +96,9 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine | |||
96 | get { return "ScriptEngine.DotNetEngine"; } | 96 | get { return "ScriptEngine.DotNetEngine"; } |
97 | } | 97 | } |
98 | 98 | ||
99 | public event ScriptRemoved OnScriptRemoved; | ||
100 | public event ObjectRemoved OnObjectRemoved; | ||
101 | |||
99 | public ScriptEngine() | 102 | public ScriptEngine() |
100 | { | 103 | { |
101 | // For logging, just need any instance, doesn't matter | 104 | // For logging, just need any instance, doesn't matter |
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs index 95a8530..8da46f4 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs | |||
@@ -41,6 +41,10 @@ namespace OpenSim.Region.ScriptEngine.Interfaces | |||
41 | /// An interface for a script API module to communicate with | 41 | /// An interface for a script API module to communicate with |
42 | /// the engine it's running under | 42 | /// the engine it's running under |
43 | /// </summary> | 43 | /// </summary> |
44 | |||
45 | public delegate void ScriptRemoved(UUID script); | ||
46 | public delegate void ObjectRemoved(UUID prim); | ||
47 | |||
44 | public interface IScriptEngine | 48 | public interface IScriptEngine |
45 | { | 49 | { |
46 | /// <summary> | 50 | /// <summary> |
@@ -50,6 +54,9 @@ namespace OpenSim.Region.ScriptEngine.Interfaces | |||
50 | 54 | ||
51 | Scene World { get; } | 55 | Scene World { get; } |
52 | 56 | ||
57 | event ScriptRemoved OnScriptRemoved; | ||
58 | event ObjectRemoved OnObjectRemoved; | ||
59 | |||
53 | /// <summary> | 60 | /// <summary> |
54 | /// Post an event to a single script | 61 | /// Post an event to a single script |
55 | /// </summary> | 62 | /// </summary> |
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs index 162f323..1029184 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs | |||
@@ -527,8 +527,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools | |||
527 | break; | 527 | break; |
528 | case enumCompileType.cs: | 528 | case enumCompileType.cs: |
529 | case enumCompileType.lsl: | 529 | case enumCompileType.lsl: |
530 | results = CScodeProvider.CompileAssemblyFromSource( | 530 | lock (CScodeProvider) |
531 | parameters, Script); | 531 | { |
532 | results = CScodeProvider.CompileAssemblyFromSource( | ||
533 | parameters, Script); | ||
534 | } | ||
532 | break; | 535 | break; |
533 | case enumCompileType.js: | 536 | case enumCompileType.js: |
534 | results = JScodeProvider.CompileAssemblyFromSource( | 537 | results = JScodeProvider.CompileAssemblyFromSource( |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 09480f6..357ee32 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -142,6 +142,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
142 | get { return m_ScriptConfig; } | 142 | get { return m_ScriptConfig; } |
143 | } | 143 | } |
144 | 144 | ||
145 | public event ScriptRemoved OnScriptRemoved; | ||
146 | public event ObjectRemoved OnObjectRemoved; | ||
147 | |||
145 | // | 148 | // |
146 | // IRegionModule functions | 149 | // IRegionModule functions |
147 | // | 150 | // |
@@ -702,6 +705,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
702 | if (part != null) | 705 | if (part != null) |
703 | part.RemoveScriptEvents(itemID); | 706 | part.RemoveScriptEvents(itemID); |
704 | 707 | ||
708 | bool objectRemoved = false; | ||
709 | |||
705 | lock (m_PrimObjects) | 710 | lock (m_PrimObjects) |
706 | { | 711 | { |
707 | // Remove the script from it's prim | 712 | // Remove the script from it's prim |
@@ -715,6 +720,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
715 | if (m_PrimObjects[localID].Count == 0) | 720 | if (m_PrimObjects[localID].Count == 0) |
716 | { | 721 | { |
717 | m_PrimObjects.Remove(localID); | 722 | m_PrimObjects.Remove(localID); |
723 | objectRemoved = true; | ||
718 | } | 724 | } |
719 | } | 725 | } |
720 | } | 726 | } |
@@ -731,8 +737,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
731 | 737 | ||
732 | instance = null; | 738 | instance = null; |
733 | 739 | ||
740 | ObjectRemoved handlerObjectRemoved = OnObjectRemoved; | ||
741 | if (handlerObjectRemoved != null) | ||
742 | handlerObjectRemoved(part.UUID); | ||
743 | |||
734 | CleanAssemblies(); | 744 | CleanAssemblies(); |
735 | } | 745 | } |
746 | |||
747 | ScriptRemoved handlerScriptRemoved = OnScriptRemoved; | ||
748 | if (handlerScriptRemoved != null) | ||
749 | handlerScriptRemoved(itemID); | ||
736 | } | 750 | } |
737 | 751 | ||
738 | public void OnScriptReset(uint localID, UUID itemID) | 752 | public void OnScriptReset(uint localID, UUID itemID) |