From 4e1f060dd19bf502f2e13cabcd55bdf573bfc89f Mon Sep 17 00:00:00 2001 From: Dr Scofield Date: Mon, 16 Feb 2009 20:01:54 +0000 Subject: [PATCH] From: alan webb & dr scofield This changeset fixes a rather nasty script compile bug that manifests itself under heavy load. --- .../ScriptEngine/Shared/CodeTools/Compiler.cs | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs index 0f4e7e5367..1734a16711 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs @@ -71,9 +71,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools private string FilePrefix; private string ScriptEnginesPath = "ScriptEngines"; + // mapping between LSL and C# line/column numbers + private Dictionary, KeyValuePair> m_positionMap; + private ICodeConverter LSL_Converter; + + // private object m_syncy = new object(); - private static ICodeConverter LSL_Converter; - private static Dictionary, KeyValuePair> m_positionMap; // mapping between LSL and C# line/column numbers private static CSharpCodeProvider CScodeProvider = new CSharpCodeProvider(); private static VBCodeProvider VBcodeProvider = new VBCodeProvider(); private static JScriptCodeProvider JScodeProvider = new JScriptCodeProvider(); @@ -89,6 +92,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools m_scriptEngine = scriptEngine; ReadConfig(); } + public bool in_startup = true; public void ReadConfig() { @@ -255,8 +259,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools /// Filename to .dll assembly public string PerformScriptCompile(string Script, string asset) { + // lock(m_syncy) m_positionMap = null; - + string OutFile = Path.Combine(ScriptEnginesPath, Path.Combine( m_scriptEngine.World.RegionInfo.RegionID.ToString(), FilePrefix + "_compiled_" + asset + ".dll")); @@ -334,6 +339,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools LSL_Converter = (ICodeConverter)new CSCodeGenerator(); compileScript = LSL_Converter.Convert(Script); + // lock(m_syncy) m_positionMap = ((CSCodeGenerator) LSL_Converter).PositionMap; } @@ -580,6 +586,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools public KeyValuePair FindErrorPosition(int line, int col) { + // lock(m_syncy) return FindErrorPosition(line, col, m_positionMap); } @@ -654,19 +661,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools return message; } - public Dictionary, KeyValuePair> - LineMap() + public Dictionary, KeyValuePair> LineMap() { + // lock(m_syncy) + // { if (m_positionMap == null) return null; - + Dictionary, KeyValuePair> ret = new Dictionary, KeyValuePair>(); - + foreach (KeyValuePair kvp in m_positionMap.Keys) ret.Add(kvp, m_positionMap[kvp]); - + return ret; + // } } } }