diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs index d781a1adef..3080c711b0 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs @@ -174,8 +174,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools else { #if DEBUG -// m_log.Debug("[Compiler]: " + -// "Config OK. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is recognized as a valid language."); + // m_log.Debug("[Compiler]: " + + // "Config OK. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is recognized as a valid language."); #endif // LANGUAGE IS IN ALLOW-LIST DefaultCompileLanguage = LanguageMapping[defaultCompileLanguage]; @@ -214,12 +214,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools catch (Exception ex) { m_log.Error("[Compiler]: Exception trying to create ScriptEngine directory \"" + Path.Combine(ScriptEnginesPath, - m_scriptEngine.World.RegionInfo.RegionID.ToString())+ "\": " + ex.ToString()); + m_scriptEngine.World.RegionInfo.RegionID.ToString()) + "\": " + ex.ToString()); } } foreach (string file in Directory.GetFiles(Path.Combine(ScriptEnginesPath, - m_scriptEngine.World.RegionInfo.RegionID.ToString()),FilePrefix + "_compiled*")) + m_scriptEngine.World.RegionInfo.RegionID.ToString()), FilePrefix + "_compiled*")) { try { @@ -273,8 +273,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools /// /// LSL script /// Filename to .dll assembly - public void PerformScriptCompile(string Script, string asset, UUID ownerUUID, - out string assembly, out Dictionary, KeyValuePair> linemap) + public void PerformScriptCompile(string Script, string asset, UUID ownerUUID, + out string assembly, out Dictionary, KeyValuePair> linemap) { linemap = null; m_warnings.Clear(); @@ -352,13 +352,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools throw new Exception(errtext); } - if (m_scriptEngine.World.Permissions.CanCompileScript(ownerUUID, (int)language) == false) { + if (m_scriptEngine.World.Permissions.CanCompileScript(ownerUUID, (int)language) == false) + { // Not allowed to compile to this language! string errtext = String.Empty; errtext += ownerUUID + " is not in list of allowed users for this scripting language. Script will not be executed!"; throw new Exception(errtext); } - + string compileScript = Script; if (language == enumCompileType.lsl) @@ -373,7 +374,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools AddWarning(warning); } - linemap = ((CSCodeGenerator) LSL_Converter).PositionMap; + linemap = ((CSCodeGenerator)LSL_Converter).PositionMap; // Write the linemap to a file and save it in our dictionary for next time. m_lineMaps[assembly] = linemap; WriteMapFile(assembly + ".map", linemap); @@ -487,7 +488,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools } catch (Exception e) // NOTLEGIT - Should be just FileIOException { - throw new Exception("Unable to delete old existing "+ + throw new Exception("Unable to delete old existing " + "script-file before writing new. Compile aborted: " + e.ToString()); } @@ -506,7 +507,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools } catch (Exception ex) //NOTLEGIT - Should be just FileIOException { - m_log.Error("[Compiler]: Exception while "+ + m_log.Error("[Compiler]: Exception while " + "trying to write script source to file \"" + srcFileName + "\": " + ex.ToString()); } @@ -547,7 +548,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools case enumCompileType.cs: case enumCompileType.lsl: bool complete = false; - bool retried = false; + bool retried = false; do { lock (CScodeProvider) @@ -588,7 +589,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools parameters, Script); break; default: - throw new Exception("Compiler is not able to recongnize "+ + throw new Exception("Compiler is not able to recongnize " + "language type \"" + lang.ToString() + "\""); } @@ -641,7 +642,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools if (!File.Exists(assembly)) { - for (int i=0; i<20 && !File.Exists(assembly); i++) + for (int i = 0; i < 20 && !File.Exists(assembly); i++) { System.Threading.Thread.Sleep(250); } @@ -654,8 +655,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools } } -// m_log.DebugFormat("[Compiler] Compiled new assembly "+ -// "for {0}", asset); + // m_log.DebugFormat("[Compiler] Compiled new assembly "+ + // "for {0}", asset); // Because windows likes to perform exclusive locks, we simply // write out a textual representation of the file here @@ -694,17 +695,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools Byte[] buf = enc.GetBytes(filetext); - FileStream sfs = File.Create(assembly+".text"); + FileStream sfs = File.Create(assembly + ".text"); sfs.Write(buf, 0, buf.Length); sfs.Close(); return assembly; } - private class kvpSorter : IComparer> + private class kvpSorter : IComparer> { - public int Compare(KeyValuePair a, - KeyValuePair b) + public int Compare(KeyValuePair a, + KeyValuePair b) { return a.Key.CompareTo(b.Key); } @@ -723,8 +724,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools out ret)) return ret; - List> sorted = - new List>(positionMap.Keys); + List> sorted = + new List>(positionMap.Keys); sorted.Sort(new kvpSorter()); @@ -791,18 +792,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools } - private static Dictionary, KeyValuePair> ReadMapFile(string filename) + private static Dictionary, KeyValuePair> ReadMapFile(string filename) { Dictionary, KeyValuePair> linemap; try { StreamReader r = File.OpenText(filename); linemap = new Dictionary, KeyValuePair>(); - + string line; while ((line = r.ReadLine()) != null) { - String[] parts = line.Split(new Char[] {','}); + String[] parts = line.Split(new Char[] { ',' }); int kk = System.Convert.ToInt32(parts[0]); int kv = System.Convert.ToInt32(parts[1]); int vk = System.Convert.ToInt32(parts[2]); diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index 37ec5dfe3c..f16aefc946 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs @@ -93,7 +93,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance private StateSource m_stateSource; private bool m_postOnRez; private bool m_startedFromSavedState = false; - private int m_CurrentStateHash; + private UUID m_CurrentStateHash; private UUID m_RegionID = UUID.Zero; private Dictionary, KeyValuePair> @@ -901,7 +901,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance // Compare hash of the state we just just created with the state last written to disk // If the state is different, update the disk file. - if(xml.GetHashCode() != m_CurrentStateHash) + UUID hash = UUID.Parse(Utils.MD5String(xml)); + + if(hash != m_CurrentStateHash) { try { @@ -919,7 +921,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance //{ // throw new Exception("Completed persistence save, but no file was created"); //} - m_CurrentStateHash = xml.GetHashCode(); + m_CurrentStateHash = hash; } } diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 57042e933e..b13e0de322 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs @@ -710,15 +710,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine evidence, appSetup); else sandbox = AppDomain.CurrentDomain; - /* - PolicyLevel sandboxPolicy = PolicyLevel.CreateAppDomainLevel(); - AllMembershipCondition sandboxMembershipCondition = new AllMembershipCondition(); - PermissionSet sandboxPermissionSet = sandboxPolicy.GetNamedPermissionSet("Internet"); - PolicyStatement sandboxPolicyStatement = new PolicyStatement(sandboxPermissionSet); - CodeGroup sandboxCodeGroup = new UnionCodeGroup(sandboxMembershipCondition, sandboxPolicyStatement); - sandboxPolicy.RootCodeGroup = sandboxCodeGroup; - sandbox.SetAppDomainPolicy(sandboxPolicy); - */ + + //PolicyLevel sandboxPolicy = PolicyLevel.CreateAppDomainLevel(); + //AllMembershipCondition sandboxMembershipCondition = new AllMembershipCondition(); + //PermissionSet sandboxPermissionSet = sandboxPolicy.GetNamedPermissionSet("Internet"); + //PolicyStatement sandboxPolicyStatement = new PolicyStatement(sandboxPermissionSet); + //CodeGroup sandboxCodeGroup = new UnionCodeGroup(sandboxMembershipCondition, sandboxPolicyStatement); + //sandboxPolicy.RootCodeGroup = sandboxCodeGroup; + //sandbox.SetAppDomainPolicy(sandboxPolicy); + m_AppDomains[appDomain] = sandbox; m_AppDomains[appDomain].AssemblyResolve += diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 63a9e117f1..3877164bc0 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -940,6 +940,13 @@ ; Stack size per thread created ThreadStackSize = 262144 + + ; Set this to true (the default) to load each script into a separate + ; AppDomain. Setting this to false will load all script assemblies into the + ; current AppDomain, which will reduce the per-script overhead at the + ; expense of reduced security and the inability to garbage collect the + ; script assemblies + AppDomainLoading = true ; Rate to poll for asynchronous command replies (ms) ; currently unused