From 038d1bf742ba4f95ca8a83b27f6fefb755485524 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 7 Feb 2012 17:44:37 +0000
Subject: Add a regression test to compile and start a script. Remove
Path.GetDirectoryName when getting assembly loading path in
Compiler.CompileFromDotNetText().
The Path.GetDirectoryName call in Compiler.CompileFromDotNetText is unnecessary since AppDomain.CurrentDomain.BaseDirectory is always a directory.
Later path concatenation is already done by Path.Combine() which handles any trailing slash.
Removing Path.GetDirectoryName() will not affect the runtime but allows NUnit to work since it doesn't add a trailing slash to AppDomain.CurrentDomain.BaseDirectory.
---
.../Framework/Scenes/SceneObjectPartInventory.cs | 12 +--
.../Region/ScriptEngine/Shared/AssemblyResolver.cs | 4 +-
.../Shared/CodeTools/CSCodeGenerator.cs | 6 ++
.../ScriptEngine/Shared/CodeTools/Compiler.cs | 10 ++-
.../ScriptEngine/XEngine/Tests/XEngineTest.cs | 96 +++++++++++++++++-----
OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 23 +++++-
OpenSim/Tests/Common/Helpers/SceneHelpers.cs | 23 +++++-
7 files changed, 137 insertions(+), 37 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 0c36dcd..f2d1915 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -267,10 +267,8 @@ namespace OpenSim.Region.Framework.Scenes
///
public void CreateScriptInstance(TaskInventoryItem item, int startParam, bool postOnRez, string engine, int stateSource)
{
- // m_log.InfoFormat(
- // "[PRIM INVENTORY]: " +
- // "Starting script {0}, {1} in prim {2}, {3}",
- // item.Name, item.ItemID, Name, UUID);
+// m_log.DebugFormat("[PRIM INVENTORY]: Starting script {0} {1} in prim {2} {3} in {4}",
+// item.Name, item.ItemID, m_part.Name, m_part.UUID, m_part.ParentGroup.Scene.RegionInfo.RegionName);
if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID))
return;
@@ -299,8 +297,7 @@ namespace OpenSim.Region.Framework.Scenes
if (null == asset)
{
m_log.ErrorFormat(
- "[PRIM INVENTORY]: " +
- "Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found",
+ "[PRIM INVENTORY]: Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found",
item.Name, item.ItemID, m_part.AbsolutePosition,
m_part.ParentGroup.Scene.RegionInfo.RegionName, item.AssetID);
}
@@ -400,8 +397,7 @@ namespace OpenSim.Region.Framework.Scenes
CreateScriptInstance(item, startParam, postOnRez, engine, stateSource);
else
m_log.ErrorFormat(
- "[PRIM INVENTORY]: " +
- "Couldn't start script with ID {0} since it couldn't be found for prim {1}, {2} at {3} in {4}",
+ "[PRIM INVENTORY]: Couldn't start script with ID {0} since it couldn't be found for prim {1}, {2} at {3} in {4}",
itemId, m_part.Name, m_part.UUID,
m_part.AbsolutePosition, m_part.ParentGroup.Scene.RegionInfo.RegionName);
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/AssemblyResolver.cs b/OpenSim/Region/ScriptEngine/Shared/AssemblyResolver.cs
index 130e197..e35f79f 100644
--- a/OpenSim/Region/ScriptEngine/Shared/AssemblyResolver.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/AssemblyResolver.cs
@@ -44,7 +44,7 @@ namespace OpenSim.Region.ScriptEngine.Shared
string dirName = myDomain.FriendlyName;
string ScriptEnginesPath = myDomain.SetupInformation.PrivateBinPath;
- string[] pathList = new string[] {"bin", ScriptEnginesPath,
+ string[] pathList = new string[] {"", "bin", ScriptEnginesPath,
Path.Combine(ScriptEnginesPath, dirName)};
string assemblyName = args.Name;
@@ -56,6 +56,8 @@ namespace OpenSim.Region.ScriptEngine.Shared
string path = Path.Combine(Directory.GetCurrentDirectory(),
Path.Combine(s, assemblyName))+".dll";
+// Console.WriteLine("Trying to resolve {0}", path);
+
if (File.Exists(path))
return Assembly.LoadFrom(path);
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
index b1fb6c2..8b88588 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
@@ -28,12 +28,16 @@
using System;
using System.IO;
using System.Collections.Generic;
+using System.Reflection;
+using log4net;
using Tools;
namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
{
public class CSCodeGenerator : ICodeConverter
{
+// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
private SYMBOL m_astRoot = null;
private Dictionary, KeyValuePair> m_positionMap;
private int m_indentWidth = 4; // for indentation
@@ -87,6 +91,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
/// String containing the generated C# code.
public string Convert(string script)
{
+// m_log.DebugFormat("[CS CODE GENERATOR]: Converting to C#\n{0}", script);
+
m_warnings.Clear();
ResetCounters();
Parser p = new LSLSyntax(new yyLSLSyntax(), new ErrorHandler(true));
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
index 734d4d5..c10143b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs
@@ -291,6 +291,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
public void PerformScriptCompile(string Script, string asset, UUID ownerUUID,
out string assembly, out Dictionary, KeyValuePair> linemap)
{
+// m_log.DebugFormat("[Compiler]: Compiling script\n{0}", Script);
+
linemap = null;
m_warnings.Clear();
@@ -357,6 +359,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
if (Script.StartsWith("//yp", true, CultureInfo.InvariantCulture))
language = enumCompileType.yp;
+// m_log.DebugFormat("[Compiler]: Compile language is {0}", language);
+
if (!AllowedCompilers.ContainsKey(language.ToString()))
{
// Not allowed to compile to this language!
@@ -417,7 +421,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
}
assembly = CompileFromDotNetText(compileScript, language, asset, assembly);
- return;
}
public string[] GetWarnings()
@@ -491,6 +494,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
/// Filename to .dll assembly
internal string CompileFromDotNetText(string Script, enumCompileType lang, string asset, string assembly)
{
+// m_log.DebugFormat("[Compiler]: Compiling to assembly\n{0}", Script);
+
string ext = "." + lang.ToString();
// Output assembly name
@@ -531,8 +536,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
parameters.IncludeDebugInformation = true;
- string rootPath =
- Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
+ string rootPath = AppDomain.CurrentDomain.BaseDirectory;
parameters.ReferencedAssemblies.Add(Path.Combine(rootPath,
"OpenSim.Region.ScriptEngine.Shared.dll"));
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineTest.cs b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineTest.cs
index b635d5c..7d7bd82 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineTest.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEngineTest.cs
@@ -27,44 +27,100 @@
using System;
using System.Collections.Generic;
+using System.Threading;
using Nini.Config;
using NUnit.Framework;
-using OpenSim.Tests.Common.Mock;
-using OpenSim.Region.Framework.Scenes;
using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Region.CoreModules.Scripting.WorldComm;
+using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Tests.Common;
+using OpenSim.Tests.Common.Mock;
namespace OpenSim.Region.ScriptEngine.XEngine.Tests
{
///
- /// Scene presence tests
+ /// XEngine tests.
///
- /// Commented out XEngineTests that don't do anything
- /*
[TestFixture]
public class XEngineTest
{
- public Scene scene;
-
- public static Random random;
- public TestClient testclient;
- //TestCommunicationsManager cm;
+ private TestScene m_scene;
+ private XEngine m_xEngine;
+ private AutoResetEvent m_chatEvent = new AutoResetEvent(false);
+ private OSChatMessage m_osChatMessageReceived;
[TestFixtureSetUp]
public void Init()
{
- TestCommunicationsManager cm = new TestCommunicationsManager();
- scene = SceneSetupHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, cm);
- random = new Random();
+ //AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory + "/bin");
+// Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
+ m_xEngine = new XEngine();
+
+ // Necessary to stop serialization complaining
+ WorldCommModule wcModule = new WorldCommModule();
+
+ IniConfigSource configSource = new IniConfigSource();
+
+ IConfig startupConfig = configSource.AddConfig("Startup");
+ startupConfig.Set("DefaultScriptEngine", "XEngine");
+
+ IConfig xEngineConfig = configSource.AddConfig("XEngine");
+ xEngineConfig.Set("Enabled", "true");
+
+ // These tests will not run with AppDomainLoading = true, at least on mono. For unknown reasons, the call
+ // to AssemblyResolver.OnAssemblyResolve fails.
+ xEngineConfig.Set("AppDomainLoading", "false");
+
+ m_scene = SceneHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, null, configSource);
+ SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule);
+ m_scene.StartScripts();
}
-
+
+ ///
+ /// Test compilation and starting of a script.
+ ///
+ ///
+ /// This is a less than ideal regression test since it involves an asynchronous operation (in this case,
+ /// compilation of the script).
+ ///
[Test]
- public void T001_XStart()
+ public void TestCompileAndStartScript()
{
- INonSharedRegionModule xengine = new XEngine();
- SceneSetupHelpers.SetupSceneModules(scene, new IniConfigSource(), xengine);
- xengine.RegionLoaded(scene);
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ UUID userId = TestHelpers.ParseTail(0x1);
+// UUID objectId = TestHelpers.ParseTail(0x2);
+// UUID itemId = TestHelpers.ParseTail(0x3);
+ string itemName = "TestStartScript() Item";
+
+ SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId, "TestStartScriptPart_", 0x100);
+ m_scene.AddNewSceneObject(so, true);
+
+ InventoryItemBase itemTemplate = new InventoryItemBase();
+// itemTemplate.ID = itemId;
+ itemTemplate.Name = itemName;
+ itemTemplate.Folder = so.UUID;
+ itemTemplate.InvType = (int)InventoryType.LSL;
+
+ m_scene.EventManager.OnChatFromWorld += OnChatFromWorld;
+
+ m_scene.RezNewScript(userId, itemTemplate);
+
+ m_chatEvent.WaitOne(60000);
+
+ Assert.That(m_osChatMessageReceived, Is.Not.Null, "No chat message received in TestStartScript()");
+ Assert.That(m_osChatMessageReceived.Message, Is.EqualTo("Script running"));
+ }
+
+ private void OnChatFromWorld(object sender, OSChatMessage oscm)
+ {
+// Console.WriteLine("Got chat [{0}]", oscm.Message);
+
+ m_osChatMessageReceived = oscm;
+ m_chatEvent.Set();
}
}
- */
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index f11987e..c68f03f 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -680,6 +680,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
public void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource)
{
+// m_log.DebugFormat(
+// "[XEngine]: OnRezScript event triggered for script {0}, startParam {1}, postOnRez {2}, engine {3}, stateSource {4}, script\n{5}",
+// itemID, startParam, postOnRez, engine, stateSource, script);
+
if (script.StartsWith("//MRM:"))
return;
@@ -761,6 +765,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
m_CompileDict[itemID] = 0;
}
+// m_log.DebugFormat("[XEngine]: Added script {0} to compile queue", itemID);
+
if (m_CurrentCompile == null)
{
// NOTE: Although we use a lockless queue, the lock here
@@ -822,6 +828,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
bool postOnRez = (bool)p[4];
StateSource stateSource = (StateSource)p[5];
+// m_log.DebugFormat("[XEngine]: DoOnRezScript called for script {0}", itemID);
+
lock (m_CompileDict)
{
if (!m_CompileDict.ContainsKey(itemID))
@@ -870,7 +878,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
{
try
{
- lock (m_AddingAssemblies)
+ lock (m_AddingAssemblies)
{
m_Compiler.PerformScriptCompile(script, assetID.ToString(), item.OwnerID, out assembly, out linemap);
if (!m_AddingAssemblies.ContainsKey(assembly)) {
@@ -922,6 +930,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
}
catch (Exception e)
{
+// m_log.ErrorFormat("[XEngine]: Exception when rezzing script {0}{1}", e.Message, e.StackTrace);
+
// try
// {
if (!m_ScriptErrors.ContainsKey(itemID))
@@ -1132,7 +1142,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
handlerObjectRemoved(part.UUID);
}
-
ScriptRemoved handlerScriptRemoved = OnScriptRemoved;
if (handlerScriptRemoved != null)
handlerScriptRemoved(itemID);
@@ -1381,6 +1390,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
string path = Path.Combine(Directory.GetCurrentDirectory(),
Path.Combine(s, assemblyName))+".dll";
+// Console.WriteLine("[XEngine]: Trying to resolve {0}", path);
+
if (File.Exists(path))
return Assembly.LoadFrom(path);
}
@@ -1863,16 +1874,24 @@ namespace OpenSim.Region.ScriptEngine.XEngine
public void SuspendScript(UUID itemID)
{
+// m_log.DebugFormat("[XEngine]: Received request to suspend script with ID {0}", itemID);
+
IScriptInstance instance = GetInstance(itemID);
if (instance != null)
instance.Suspend();
+// else
+// m_log.DebugFormat("[XEngine]: Could not find script with ID {0} to resume", itemID);
}
public void ResumeScript(UUID itemID)
{
+// m_log.DebugFormat("[XEngine]: Received request to resume script with ID {0}", itemID);
+
IScriptInstance instance = GetInstance(itemID);
if (instance != null)
instance.Resume();
+// else
+// m_log.DebugFormat("[XEngine]: Could not find script with ID {0} to resume", itemID);
}
}
}
\ No newline at end of file
diff --git a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
index a25eb66..aa904aa 100644
--- a/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
+++ b/OpenSim/Tests/Common/Helpers/SceneHelpers.cs
@@ -88,9 +88,27 @@ namespace OpenSim.Tests.Common
/// ID of the region
/// X co-ordinate of the region
/// Y co-ordinate of the region
- /// This should be the same if simulating two scenes within a standalone
+ ///
///
- public static TestScene SetupScene(string name, UUID id, uint x, uint y, CoreAssetCache cache)
+ public static TestScene SetupScene(
+ string name, UUID id, uint x, uint y, CoreAssetCache cache)
+ {
+ return SetupScene(name, id, x, y, cache, new IniConfigSource());
+ }
+
+ ///
+ /// Set up a scene. If it's more then one scene, use the same CommunicationsManager to link regions
+ /// or a different, to get a brand new scene with new shared region modules.
+ ///
+ /// Name of the region
+ /// ID of the region
+ /// X co-ordinate of the region
+ /// Y co-ordinate of the region
+ ///
+ ///
+ ///
+ public static TestScene SetupScene(
+ string name, UUID id, uint x, uint y, CoreAssetCache cache, IConfigSource configSource)
{
Console.WriteLine("Setting up test scene {0}", name);
@@ -106,7 +124,6 @@ namespace OpenSim.Tests.Common
ISimulationDataService simDataService = OpenSim.Server.Base.ServerUtils.LoadPlugin("OpenSim.Tests.Common.dll", null);
IEstateDataService estateDataService = null;
- IConfigSource configSource = new IniConfigSource();
TestScene testScene = new TestScene(
regInfo, acm, scs, simDataService, estateDataService, null, false, configSource, null);
--
cgit v1.1
From c22970448f00cdd88c1e81fc4f1a095f7d3d42e6 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 7 Feb 2012 19:42:32 +0000
Subject: Add TestCompileAndStart100Scripts() torture test.
---
OpenSim/Tests/Torture/ObjectTortureTests.cs | 2 +-
OpenSim/Tests/Torture/ScriptTortureTests.cs | 157 ++++++++++++++++++++++++++++
prebuild.xml | 2 +
3 files changed, 160 insertions(+), 1 deletion(-)
create mode 100644 OpenSim/Tests/Torture/ScriptTortureTests.cs
diff --git a/OpenSim/Tests/Torture/ObjectTortureTests.cs b/OpenSim/Tests/Torture/ObjectTortureTests.cs
index b9764d7..444b7ec 100644
--- a/OpenSim/Tests/Torture/ObjectTortureTests.cs
+++ b/OpenSim/Tests/Torture/ObjectTortureTests.cs
@@ -118,7 +118,7 @@ namespace OpenSim.Tests.Torture
TestScene scene = SceneHelpers.SetupScene();
- Process process = Process.GetCurrentProcess();
+// Process process = Process.GetCurrentProcess();
// long startProcessMemory = process.PrivateMemorySize64;
long startGcMemory = GC.GetTotalMemory(true);
DateTime start = DateTime.Now;
diff --git a/OpenSim/Tests/Torture/ScriptTortureTests.cs b/OpenSim/Tests/Torture/ScriptTortureTests.cs
new file mode 100644
index 0000000..c0239ba
--- /dev/null
+++ b/OpenSim/Tests/Torture/ScriptTortureTests.cs
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Reflection;
+using System.Threading;
+using log4net;
+using Nini.Config;
+using NUnit.Framework;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Region.CoreModules.Scripting.WorldComm;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Region.ScriptEngine.XEngine;
+using OpenSim.Tests.Common;
+using OpenSim.Tests.Common.Mock;
+
+namespace OpenSim.Tests.Torture
+{
+ ///
+ /// Script torture tests
+ ///
+ ///
+ /// Don't rely on the numbers given by these tests - they will vary a lot depending on what is already cached,
+ /// how much memory is free, etc. In some cases, later larger tests will apparently take less time than smaller
+ /// earlier tests.
+ ///
+ [TestFixture]
+ public class ScriptTortureTests
+ {
+ private TestScene m_scene;
+ private XEngine m_xEngine;
+ private AutoResetEvent m_chatEvent = new AutoResetEvent(false);
+
+ private int m_expectedChatMessages;
+ private List m_osChatMessagesReceived = new List();
+
+ [SetUp]
+ public void Init()
+ {
+ //AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory + "/bin");
+// Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
+ m_xEngine = new XEngine();
+
+ // Necessary to stop serialization complaining
+ WorldCommModule wcModule = new WorldCommModule();
+
+ IniConfigSource configSource = new IniConfigSource();
+
+ IConfig startupConfig = configSource.AddConfig("Startup");
+ startupConfig.Set("DefaultScriptEngine", "XEngine");
+
+ IConfig xEngineConfig = configSource.AddConfig("XEngine");
+ xEngineConfig.Set("Enabled", "true");
+
+ // These tests will not run with AppDomainLoading = true, at least on mono. For unknown reasons, the call
+ // to AssemblyResolver.OnAssemblyResolve fails.
+ xEngineConfig.Set("AppDomainLoading", "false");
+
+ m_scene = SceneHelpers.SetupScene("My Test", UUID.Random(), 1000, 1000, null, configSource);
+ SceneHelpers.SetupSceneModules(m_scene, configSource, m_xEngine, wcModule);
+
+ m_scene.EventManager.OnChatFromWorld += OnChatFromWorld;
+ m_scene.StartScripts();
+ }
+
+ [Test]
+ public void TestCompileAndStart100Scripts()
+ {
+ TestHelpers.InMethod();
+ log4net.Config.XmlConfigurator.Configure();
+
+ TestCompileAndStartScripts(100);
+ }
+
+ private void TestCompileAndStartScripts(int scriptsToCreate)
+ {
+ UUID userId = TestHelpers.ParseTail(0x1);
+
+ m_expectedChatMessages = scriptsToCreate;
+ int startingObjectIdTail = 0x100;
+
+ for (int idTail = startingObjectIdTail;idTail < startingObjectIdTail + scriptsToCreate; idTail++)
+ {
+ AddObjectAndScript(idTail, userId);
+ }
+
+ m_chatEvent.WaitOne(40000 + scriptsToCreate * 1000);
+
+ Assert.That(m_osChatMessagesReceived.Count, Is.EqualTo(m_expectedChatMessages));
+
+ foreach (OSChatMessage msg in m_osChatMessagesReceived)
+ Assert.That(
+ msg.Message,
+ Is.EqualTo("Script running"),
+ string.Format(
+ "Message from {0} was {1} rather than {2}", msg.SenderUUID, msg.Message, "Script running"));
+ }
+
+ private void AddObjectAndScript(int objectIdTail, UUID userId)
+ {
+// UUID itemId = TestHelpers.ParseTail(0x3);
+ string itemName = string.Format("AddObjectAndScript() Item for object {0}", objectIdTail);
+
+ SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, userId, "AddObjectAndScriptPart_", objectIdTail);
+ m_scene.AddNewSceneObject(so, true);
+
+ InventoryItemBase itemTemplate = new InventoryItemBase();
+// itemTemplate.ID = itemId;
+ itemTemplate.Name = itemName;
+ itemTemplate.Folder = so.UUID;
+ itemTemplate.InvType = (int)InventoryType.LSL;
+
+ m_scene.RezNewScript(userId, itemTemplate);
+ }
+
+ private void OnChatFromWorld(object sender, OSChatMessage oscm)
+ {
+// Console.WriteLine("Got chat [{0}]", oscm.Message);
+
+ lock (m_osChatMessagesReceived)
+ {
+ m_osChatMessagesReceived.Add(oscm);
+
+ if (m_osChatMessagesReceived.Count == m_expectedChatMessages)
+ m_chatEvent.Set();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/prebuild.xml b/prebuild.xml
index 94d86d1..23a5a3b 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -3286,7 +3286,9 @@
+
+
--
cgit v1.1
From 7583768b9e40e1033cc417047226d8ab80b36294 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 7 Feb 2012 20:26:26 +0000
Subject: Remove debug logging if physics actor is null in SOP.ApplyPhysics()
This is not valid in the case of BasicPhysics which can return a null PhysicsActor (though I think it should really return a do-nothing PhysicsActor).
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 0e899ca..4c339d9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1501,7 +1501,7 @@ namespace OpenSim.Region.Framework.Scenes
PhysActor = null;
}
- // Basic Physics returns null.. joy joy joy.
+ // Basic Physics can also return null as well as an exception catch.
if (PhysActor != null)
{
PhysActor.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info
@@ -1509,10 +1509,6 @@ namespace OpenSim.Region.Framework.Scenes
DoPhysicsPropertyUpdate(RigidBody, true);
PhysActor.SetVolumeDetect(VolumeDetectActive ? 1 : 0);
}
- else
- {
- m_log.DebugFormat("[SOP]: physics actor is null for {0} with parent {1}", UUID, this.ParentGroup.UUID);
- }
}
}
}
--
cgit v1.1
From 773994723a9240b128f5054bd48e4e09b9045e63 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 7 Feb 2012 20:35:04 +0000
Subject: Add warning about only uncommenting EstateConnectionString if you
know what you're doing to GridCommon.ini.example (was already in
StandaloneCommon.ini.example)
---
bin/config-include/GridCommon.ini.example | 2 ++
1 file changed, 2 insertions(+)
diff --git a/bin/config-include/GridCommon.ini.example b/bin/config-include/GridCommon.ini.example
index 4195bce..712481d 100644
--- a/bin/config-include/GridCommon.ini.example
+++ b/bin/config-include/GridCommon.ini.example
@@ -14,6 +14,8 @@
;StorageProvider = "OpenSim.Data.MySQL.dll"
;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;"
; Uncomment this line if you are using MySQL and want to use a different database for estates
+ ; The usual application for this is to allow estates to be spread out across multiple simulators by share the same database.
+ ; Most people won't need to do this so only uncomment if you know what you're doing.
;EstateConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;Old Guids=true;"
; MSSQL
--
cgit v1.1
From bd928218dd0845bb0aef46749e8a393d0a9e4fbc Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 7 Feb 2012 21:00:47 +0000
Subject: Add TestAddTaskInventoryItem()
---
.../Framework/Scenes/Tests/TaskInventoryTests.cs | 26 +++++++++++++++++++++-
.../Tests/Common/Helpers/TaskInventoryHelpers.cs | 12 +++++++---
2 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs
index 1abef8d..e4b607d 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs
@@ -53,6 +53,30 @@ namespace OpenSim.Region.Framework.Tests
public class TaskInventoryTests
{
[Test]
+ public void TestAddTaskInventoryItem()
+ {
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ Scene scene = SceneHelpers.SetupScene();
+ UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene);
+ SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, user1.PrincipalID);
+ SceneObjectPart sop1 = sog1.RootPart;
+
+ // Create an object embedded inside the first
+ UUID taskSceneObjectItemId = UUID.Parse("00000000-0000-0000-0000-100000000000");
+ TaskInventoryItem taskSceneObjectItem
+ = TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId, user1.PrincipalID);
+
+ TaskInventoryItem addedItem = sop1.Inventory.GetInventoryItem(taskSceneObjectItemId);
+ Assert.That(addedItem.ItemID, Is.EqualTo(taskSceneObjectItemId));
+ Assert.That(addedItem.OwnerID, Is.EqualTo(user1.PrincipalID));
+ Assert.That(addedItem.ParentID, Is.EqualTo(sop1.UUID));
+ Assert.That(addedItem.InvType, Is.EqualTo((int)InventoryType.Object));
+ Assert.That(addedItem.Type, Is.EqualTo((int)AssetType.Object));
+ }
+
+ [Test]
public void TestRezObjectFromInventoryItem()
{
TestHelpers.InMethod();
@@ -66,7 +90,7 @@ namespace OpenSim.Region.Framework.Tests
// Create an object embedded inside the first
UUID taskSceneObjectItemId = UUID.Parse("00000000-0000-0000-0000-100000000000");
TaskInventoryItem taskSceneObjectItem
- = TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId);
+ = TaskInventoryHelpers.AddSceneObject(scene, sop1, "tso", taskSceneObjectItemId, user1.PrincipalID);
scene.AddSceneObject(sog1);
diff --git a/OpenSim/Tests/Common/Helpers/TaskInventoryHelpers.cs b/OpenSim/Tests/Common/Helpers/TaskInventoryHelpers.cs
index a8f0d59..7058d1e 100644
--- a/OpenSim/Tests/Common/Helpers/TaskInventoryHelpers.cs
+++ b/OpenSim/Tests/Common/Helpers/TaskInventoryHelpers.cs
@@ -72,15 +72,21 @@ namespace OpenSim.Tests.Common
///
///
///
- public static TaskInventoryItem AddSceneObject(Scene scene, SceneObjectPart sop, string itemName, UUID id)
+ ///
+ public static TaskInventoryItem AddSceneObject(
+ Scene scene, SceneObjectPart sop, string itemName, UUID id, UUID userId)
{
SceneObjectGroup taskSceneObject = SceneHelpers.CreateSceneObject(1, UUID.Zero);
AssetBase taskSceneObjectAsset = AssetHelpers.CreateAsset(0x10, taskSceneObject);
scene.AssetService.Store(taskSceneObjectAsset);
TaskInventoryItem taskSceneObjectItem
= new TaskInventoryItem
- { Name = itemName, AssetID = taskSceneObjectAsset.FullID, ItemID = id,
- Type = (int)AssetType.Object, InvType = (int)InventoryType.Object };
+ { Name = itemName,
+ AssetID = taskSceneObjectAsset.FullID,
+ ItemID = id,
+ OwnerID = userId,
+ Type = (int)AssetType.Object,
+ InvType = (int)InventoryType.Object };
sop.Inventory.AddInventoryItem(taskSceneObjectItem, true);
return taskSceneObjectItem;
--
cgit v1.1
From 1f402fdf5e8ef53a07f98c4447946805791d26bc Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 7 Feb 2012 21:40:28 +0000
Subject: Add url to logging if SynchronousRestFormsRequester.MakRequest()
throws an exception in service connectors
---
.../Connectors/Avatar/AvatarServiceConnector.cs | 40 ++++++------
.../Connectors/Friends/FriendsServiceConnector.cs | 22 +++----
.../Connectors/Friends/FriendsSimConnector.cs | 9 ++-
.../Connectors/Grid/GridServiceConnector.cs | 72 ++++++++++++----------
.../GridUser/GridUserServiceConnector.cs | 15 +++--
.../Hypergrid/HGFriendsServiceConnector.cs | 15 +++--
.../MapImage/MapImageServiceConnector.cs | 5 +-
.../Presence/PresenceServiceConnector.cs | 30 +++++----
.../UserAccounts/UserAccountServiceConnector.cs | 15 +++--
9 files changed, 120 insertions(+), 103 deletions(-)
diff --git a/OpenSim/Services/Connectors/Avatar/AvatarServiceConnector.cs b/OpenSim/Services/Connectors/Avatar/AvatarServiceConnector.cs
index 8fdb4d0..ddfca57 100644
--- a/OpenSim/Services/Connectors/Avatar/AvatarServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Avatar/AvatarServiceConnector.cs
@@ -110,12 +110,11 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try
{
- reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/avatar",
- reqString);
+ reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
m_log.DebugFormat("[AVATAR CONNECTOR]: GetAgent received null or empty reply");
@@ -124,7 +123,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -159,12 +158,11 @@ namespace OpenSim.Services.Connectors
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/avatar";
//m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/avatar",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -177,15 +175,18 @@ namespace OpenSim.Services.Connectors
return false;
}
else
+ {
m_log.DebugFormat("[AVATAR CONNECTOR]: SetAvatar reply data does not contain result field");
-
+ }
}
else
+ {
m_log.DebugFormat("[AVATAR CONNECTOR]: SetAvatar received empty reply");
+ }
}
catch (Exception e)
{
- m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message);
+ m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -202,12 +203,11 @@ namespace OpenSim.Services.Connectors
sendData["UserID"] = userID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/avatar",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -228,7 +228,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message);
+ m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -246,12 +246,11 @@ namespace OpenSim.Services.Connectors
sendData["Values"] = new List(values);
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/avatar",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -272,7 +271,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message);
+ m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -290,12 +289,11 @@ namespace OpenSim.Services.Connectors
sendData["Names"] = new List(names);
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/avatar";
// m_log.DebugFormat("[AVATAR CONNECTOR]: queryString = {0}", reqString);
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/avatar",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -316,7 +314,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting avatar server: {0}", e.Message);
+ m_log.DebugFormat("[AVATAR CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
diff --git a/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs b/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
index 41361ab..44138c9 100644
--- a/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
@@ -108,12 +108,11 @@ namespace OpenSim.Services.Connectors.Friends
protected FriendInfo[] GetFriends(Dictionary sendData, string PrincipalID)
{
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/friends";
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/friends",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -143,7 +142,6 @@ namespace OpenSim.Services.Connectors.Friends
// Success
return finfos.ToArray();
}
-
else
m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: GetFriends {0} received null response",
PrincipalID);
@@ -152,7 +150,7 @@ namespace OpenSim.Services.Connectors.Friends
}
catch (Exception e)
{
- m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
}
return new FriendInfo[0];
@@ -167,15 +165,14 @@ namespace OpenSim.Services.Connectors.Friends
sendData["METHOD"] = "storefriend";
string reply = string.Empty;
+ string uri = m_ServerURI + "/friends";
try
{
- reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/friends",
- ServerUtils.BuildQueryString(sendData));
+ reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false;
}
@@ -223,15 +220,14 @@ namespace OpenSim.Services.Connectors.Friends
public bool Delete(Dictionary sendData, string PrincipalID, string Friend)
{
string reply = string.Empty;
+ string uri = m_ServerURI = "/friends";
try
{
- reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/friends",
- ServerUtils.BuildQueryString(sendData));
+ reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[FRIENDS SERVICE CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false;
}
diff --git a/OpenSim/Services/Connectors/Friends/FriendsSimConnector.cs b/OpenSim/Services/Connectors/Friends/FriendsSimConnector.cs
index d0a20fc..eea9853 100644
--- a/OpenSim/Services/Connectors/Friends/FriendsSimConnector.cs
+++ b/OpenSim/Services/Connectors/Friends/FriendsSimConnector.cs
@@ -139,12 +139,11 @@ namespace OpenSim.Services.Connectors.Friends
return false;
m_log.DebugFormat("[FRIENDS SIM CONNECTOR]: region: {0}", region.ExternalHostName + ":" + region.HttpPort);
+ string uri = "http://" + region.ExternalHostName + ":" + region.HttpPort + "/friends";
+
try
{
- string url = "http://" + region.ExternalHostName + ":" + region.HttpPort;
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- url + "/friends",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -165,7 +164,7 @@ namespace OpenSim.Services.Connectors.Friends
}
catch (Exception e)
{
- m_log.DebugFormat("[FRIENDS SIM CONNECTOR]: Exception when contacting remote sim: {0}", e.ToString());
+ m_log.DebugFormat("[FRIENDS SIM CONNECTOR]: Exception when contacting remote sim at {0}: {1}", uri, e.Message);
}
return false;
diff --git a/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs b/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs
index e57f28b..1599a56 100644
--- a/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs
@@ -98,12 +98,11 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "register";
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/grid";
// m_log.DebugFormat("[GRID CONNECTOR]: queryString = {0}", reqString);
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
- reqString);
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
if (reply != string.Empty)
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -133,7 +132,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
}
return "Error communicating with grid service";
@@ -147,11 +146,12 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "deregister";
+ string uri = m_ServerURI + "/grid";
+
try
{
- string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
- ServerUtils.BuildQueryString(sendData));
+ string reply
+ = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
if (reply != string.Empty)
{
@@ -165,7 +165,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
}
return false;
@@ -184,15 +184,15 @@ namespace OpenSim.Services.Connectors
string reqString = ServerUtils.BuildQueryString(sendData);
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
+
try
{
- reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
- reqString);
+ reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, reqString);
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -228,15 +228,14 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_by_uuid";
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
- reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
- ServerUtils.BuildQueryString(sendData));
+ reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return null;
}
@@ -274,15 +273,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_by_position";
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return null;
}
@@ -318,15 +318,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_by_name";
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return null;
}
@@ -361,15 +362,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_regions_by_name";
List rinfos = new List();
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -413,17 +415,19 @@ namespace OpenSim.Services.Connectors
List rinfos = new List();
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
+
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -463,17 +467,18 @@ namespace OpenSim.Services.Connectors
List rinfos = new List();
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -515,17 +520,18 @@ namespace OpenSim.Services.Connectors
List rinfos = new List();
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -565,17 +571,18 @@ namespace OpenSim.Services.Connectors
List rinfos = new List();
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return rinfos;
}
@@ -615,15 +622,16 @@ namespace OpenSim.Services.Connectors
sendData["METHOD"] = "get_region_flags";
string reply = string.Empty;
+ string uri = m_ServerURI + "/grid";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/grid",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
return -1;
}
diff --git a/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs b/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
index aa98b5d..20d7eaf 100644
--- a/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
+++ b/OpenSim/Services/Connectors/GridUser/GridUserServiceConnector.cs
@@ -156,11 +156,12 @@ namespace OpenSim.Services.Connectors
sendData["LookAt"] = lookAt.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/griduser";
// m_log.DebugFormat("[GRID USER CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/griduser",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -182,7 +183,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server: {0}", e.Message);
+ m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server at {0}: {1}", uri, e.Message);
}
return false;
@@ -191,11 +192,12 @@ namespace OpenSim.Services.Connectors
protected GridUserInfo Get(Dictionary sendData)
{
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/griduser";
// m_log.DebugFormat("[GRID USER CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/griduser",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -216,7 +218,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server: {0}", e.Message);
+ m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server at {0}: {1}", uri, e.Message);
}
return null;
@@ -235,11 +237,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/griduser";
//m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/griduser",
+ uri,
reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
@@ -249,7 +252,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server: {0}", e.Message);
+ m_log.DebugFormat("[GRID USER CONNECTOR]: Exception when contacting grid user server at {0}: {1}", uri, e.Message);
}
List rinfos = new List();
diff --git a/OpenSim/Services/Connectors/Hypergrid/HGFriendsServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/HGFriendsServiceConnector.cs
index d699f59..af4b0da 100644
--- a/OpenSim/Services/Connectors/Hypergrid/HGFriendsServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/HGFriendsServiceConnector.cs
@@ -79,11 +79,12 @@ namespace OpenSim.Services.Connectors.Hypergrid
sendData["SESSIONID"] = m_SessionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/hgfriends";
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/hgfriends",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -103,7 +104,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
}
catch (Exception e)
{
- m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
}
return 0;
@@ -123,15 +124,16 @@ namespace OpenSim.Services.Connectors.Hypergrid
sendData["SESSIONID"] = m_SessionID.ToString();
string reply = string.Empty;
+ string uri = m_ServerURI + "/hgfriends";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/hgfriends",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false;
}
@@ -168,15 +170,16 @@ namespace OpenSim.Services.Connectors.Hypergrid
sendData["SECRET"] = secret;
string reply = string.Empty;
+ string uri = m_ServerURI + "/hgfriends";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/hgfriends",
+ uri,
ServerUtils.BuildQueryString(sendData));
}
catch (Exception e)
{
- m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server: {0}", e.Message);
+ m_log.DebugFormat("[HGFRIENDS CONNECTOR]: Exception when contacting friends server at {0}: {1}", uri, e.Message);
return false;
}
diff --git a/OpenSim/Services/Connectors/MapImage/MapImageServiceConnector.cs b/OpenSim/Services/Connectors/MapImage/MapImageServiceConnector.cs
index e46714e..30bfb70 100644
--- a/OpenSim/Services/Connectors/MapImage/MapImageServiceConnector.cs
+++ b/OpenSim/Services/Connectors/MapImage/MapImageServiceConnector.cs
@@ -97,11 +97,12 @@ namespace OpenSim.Services.Connectors
sendData["DATA"] = Convert.ToBase64String(jpgData);
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/map";
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/map",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -135,7 +136,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[MAP IMAGE CONNECTOR]: Exception when contacting grid server: {0}", e.Message);
+ m_log.DebugFormat("[MAP IMAGE CONNECTOR]: Exception when contacting map server at {0}: {1}", uri, e.Message);
}
finally
{
diff --git a/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs b/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs
index 7238afc..f7d8c53 100644
--- a/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs
@@ -98,11 +98,12 @@ namespace OpenSim.Services.Connectors
sendData["SecureSessionID"] = secureSessionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -124,7 +125,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -142,11 +143,12 @@ namespace OpenSim.Services.Connectors
sendData["SessionID"] = sessionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -168,7 +170,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -185,11 +187,12 @@ namespace OpenSim.Services.Connectors
sendData["RegionID"] = regionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -211,7 +214,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -229,11 +232,12 @@ namespace OpenSim.Services.Connectors
sendData["RegionID"] = regionID.ToString();
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -255,7 +259,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
return false;
@@ -273,11 +277,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
// m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
@@ -287,7 +292,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -316,11 +321,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/presence";
//m_log.DebugFormat("[PRESENCE CONNECTOR]: queryString = {0}", reqString);
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/presence",
+ uri,
reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
@@ -330,7 +336,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server: {0}", e.Message);
+ m_log.DebugFormat("[PRESENCE CONNECTOR]: Exception when contacting presence server at {0}: {1}", uri, e.Message);
}
List rinfos = new List();
diff --git a/OpenSim/Services/Connectors/UserAccounts/UserAccountServiceConnector.cs b/OpenSim/Services/Connectors/UserAccounts/UserAccountServiceConnector.cs
index f6835b9..609dafe 100644
--- a/OpenSim/Services/Connectors/UserAccounts/UserAccountServiceConnector.cs
+++ b/OpenSim/Services/Connectors/UserAccounts/UserAccountServiceConnector.cs
@@ -138,11 +138,12 @@ namespace OpenSim.Services.Connectors
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/accounts";
// m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/accounts",
+ uri,
reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
@@ -152,7 +153,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting accounts server: {0}", e.Message);
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user accounts server at {0}: {1}", uri, e.Message);
}
List accounts = new List();
@@ -206,11 +207,12 @@ namespace OpenSim.Services.Connectors
{
string reply = string.Empty;
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/accounts";
// m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/accounts",
+ uri,
reqString);
if (reply == null || (reply != null && reply == string.Empty))
{
@@ -220,7 +222,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user account server: {0}", e.Message);
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user accounts server at {0}: {1}", uri, e.Message);
}
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
@@ -241,11 +243,12 @@ namespace OpenSim.Services.Connectors
private bool SendAndGetBoolReply(Dictionary sendData)
{
string reqString = ServerUtils.BuildQueryString(sendData);
+ string uri = m_ServerURI + "/accounts";
// m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
try
{
string reply = SynchronousRestFormsRequester.MakeRequest("POST",
- m_ServerURI + "/accounts",
+ uri,
reqString);
if (reply != string.Empty)
{
@@ -267,7 +270,7 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.DebugFormat("[ACCOUNTS CONNECTOR]: Exception when contacting user account server: {0}", e.Message);
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user accounts server at {0}: {1}", uri, e.Message);
}
return false;
--
cgit v1.1
From c87751a822db328145963782f0f10adb23e32d39 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 7 Feb 2012 23:03:53 +0000
Subject: Add start GC memory and end GC memory to object stress test
printouts.
This illustrates that references to Scene, SOG, etc. are not currently being released when a stress test ends (or at regression test end in general).
This means even the current stress tests take much more memory than they need, a problem that will have to be addressed.
---
OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 3 ++-
OpenSim/Tests/Common/Mock/TestScene.cs | 5 +++++
OpenSim/Tests/Torture/ObjectTortureTests.cs | 16 +++++++++++++---
OpenSim/Tests/Torture/ScriptTortureTests.cs | 2 ++
4 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 8939342..b724135 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -567,7 +567,8 @@ namespace OpenSim.Region.Framework.Scenes
// ~SceneObjectGroup()
// {
-// m_log.DebugFormat("[SCENE OBJECT GROUP]: Destructor called for {0}, local id {1}", Name, LocalId);
+// //m_log.DebugFormat("[SCENE OBJECT GROUP]: Destructor called for {0}, local id {1}", Name, LocalId);
+// Console.WriteLine("Destructor called for {0}, local id {1}", Name, LocalId);
// }
#region Constructors
diff --git a/OpenSim/Tests/Common/Mock/TestScene.cs b/OpenSim/Tests/Common/Mock/TestScene.cs
index 07bcdce..328cd2b 100644
--- a/OpenSim/Tests/Common/Mock/TestScene.cs
+++ b/OpenSim/Tests/Common/Mock/TestScene.cs
@@ -47,6 +47,11 @@ namespace OpenSim.Tests.Common.Mock
dumpAssetsToFile, config, simulatorVersion)
{
}
+
+ ~TestScene()
+ {
+ Console.WriteLine("TestScene destructor called for {0}", RegionInfo.RegionName);
+ }
///
/// Temporarily override session authentication for tests (namely teleport).
diff --git a/OpenSim/Tests/Torture/ObjectTortureTests.cs b/OpenSim/Tests/Torture/ObjectTortureTests.cs
index 444b7ec..74b336e 100644
--- a/OpenSim/Tests/Torture/ObjectTortureTests.cs
+++ b/OpenSim/Tests/Torture/ObjectTortureTests.cs
@@ -131,7 +131,7 @@ namespace OpenSim.Tests.Torture
TimeSpan elapsed = DateTime.Now - start;
// long processMemoryAlloc = process.PrivateMemorySize64 - startProcessMemory;
- long processGcAlloc = GC.GetTotalMemory(false) - startGcMemory;
+ long endGcMemory = GC.GetTotalMemory(false);
for (int i = 1; i <= objectsToAdd; i++)
{
@@ -141,9 +141,19 @@ namespace OpenSim.Tests.Torture
string.Format("Object {0} could not be retrieved", i));
}
+ // This does not work to fire the SceneObjectGroup destructors - something else is hanging on to them.
+// scene.DeleteAllSceneObjects();
+
Console.WriteLine(
- "Took {0}ms, {1}MB to create {2} objects each containing {3} prim(s)",
- Math.Round(elapsed.TotalMilliseconds), processGcAlloc / 1024 / 1024, objectsToAdd, primsInEachObject);
+ "Took {0}ms, {1}MB ({2} - {3}) to create {4} objects each containing {5} prim(s)",
+ Math.Round(elapsed.TotalMilliseconds),
+ (endGcMemory - startGcMemory) / 1024 / 1024,
+ endGcMemory / 1024 / 1024,
+ startGcMemory / 1024 / 1024,
+ objectsToAdd,
+ primsInEachObject);
+
+ scene = null;
}
}
}
\ No newline at end of file
diff --git a/OpenSim/Tests/Torture/ScriptTortureTests.cs b/OpenSim/Tests/Torture/ScriptTortureTests.cs
index c0239ba..d94bbde 100644
--- a/OpenSim/Tests/Torture/ScriptTortureTests.cs
+++ b/OpenSim/Tests/Torture/ScriptTortureTests.cs
@@ -107,6 +107,8 @@ namespace OpenSim.Tests.Torture
m_expectedChatMessages = scriptsToCreate;
int startingObjectIdTail = 0x100;
+ GC.Collect();
+
for (int idTail = startingObjectIdTail;idTail < startingObjectIdTail + scriptsToCreate; idTail++)
{
AddObjectAndScript(idTail, userId);
--
cgit v1.1
From a4367e75d39b3c3ba8aa0481c8bcb11991f7bb54 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 7 Feb 2012 23:15:23 +0000
Subject: Set UseMeshiesPhysicsMesh = true in [Mesh] by default
This means that uploaded meshes will get a physics (collision) mesh if uploaded with that option via a viewer.
---
bin/OpenSimDefaults.ini | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 01cf791..62fe9d4 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -637,13 +637,12 @@
[Mesh]
; enable / disable Collada mesh support
; default is true
- ; AllowMeshUpload = true
+ AllowMeshUpload = true
; if you use Meshmerizer and want collisions for meshies, setting this to true
; will cause OpenSim to attempt to decode meshies assets, extract the physics
- ; mesh, and use it for collisions. This is currently experimental code and enabling
- ; it may cause unexpected physics problems.
- ;UseMeshiesPhysicsMesh = false
+ ; mesh, and use it for collisions.
+ UseMeshiesPhysicsMesh = true
[ODEPhysicsSettings]
--
cgit v1.1
From bef2a368f4d901fa231802845aa71b6134c888f4 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 7 Feb 2012 23:38:53 +0000
Subject: Make WebStats logging report consistently as WEB STATS MODULE instead
of VC, VS and WEBSTATS
---
OpenSim/Region/UserStatistics/WebStatsModule.cs | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/OpenSim/Region/UserStatistics/WebStatsModule.cs b/OpenSim/Region/UserStatistics/WebStatsModule.cs
index 24a9418..f627e37 100644
--- a/OpenSim/Region/UserStatistics/WebStatsModule.cs
+++ b/OpenSim/Region/UserStatistics/WebStatsModule.cs
@@ -301,7 +301,7 @@ namespace OpenSim.Region.UserStatistics
public void OnRegisterCaps(UUID agentID, Caps caps)
{
- m_log.DebugFormat("[VC]: OnRegisterCaps: agentID {0} caps {1}", agentID, caps);
+ m_log.DebugFormat("[WEB STATS MODULE]: OnRegisterCaps: agentID {0} caps {1}", agentID, caps);
string capsPath = "/CAPS/VS/" + UUID.Random();
caps.RegisterHandler("ViewerStats",
new RestStreamHandler("POST", capsPath,
@@ -462,7 +462,7 @@ namespace OpenSim.Region.UserStatistics
if (!m_sessions.ContainsKey(agentID))
{
- m_log.Warn("[VS]: no session for stat disclosure");
+ m_log.Warn("[WEB STATS MODULE]: no session for stat disclosure");
return new UserSessionID();
}
uid = m_sessions[agentID];
@@ -667,14 +667,13 @@ namespace OpenSim.Region.UserStatistics
{
updatecmd.ExecuteNonQuery();
}
- catch
- (SqliteExecutionException)
+ catch (SqliteExecutionException)
{
- m_log.Warn("[WEBSTATS]: failed to write stats to storage Execution Exception");
+ m_log.Warn("[WEB STATS MODULE]: failed to write stats to storage Execution Exception");
}
catch (SqliteSyntaxException)
{
- m_log.Warn("[WEBSTATS]: failed to write stats to storage SQL Syntax Exception");
+ m_log.Warn("[WEB STATS MODULE]: failed to write stats to storage SQL Syntax Exception");
}
}
--
cgit v1.1
From d5c08c44bf1f0a875ae3563b66c759d7a24155d8 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Tue, 7 Feb 2012 16:40:09 -0800
Subject: Add missing reference to prebuild.xml for torture tests
---
prebuild.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/prebuild.xml b/prebuild.xml
index 23a5a3b..1bf4972 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -3288,6 +3288,7 @@
+
--
cgit v1.1
From dfa19e23f03643762a10677203c088161a99557e Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 8 Feb 2012 21:58:59 +0000
Subject: Stop a scene object from attempting to link with itself (which
results in an exception and constant complaints in v3 viewers).
Aims to address http://opensimulator.org/mantis/view.php?id=5878
---
OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 21 ++++++++++++++++++--
OpenSim/Region/Framework/Scenes/SceneGraph.cs | 16 ++++++++++-----
.../Region/Framework/Scenes/SceneObjectGroup.cs | 4 ++++
.../Scenes/Tests/SceneObjectLinkingTests.cs | 23 +++++++++++++++++++---
4 files changed, 54 insertions(+), 10 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 6d7559e..af01624 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -2170,8 +2170,25 @@ namespace OpenSim.Region.Framework.Scenes
m_sceneGraph.DelinkObjects(parts);
}
+ ///
+ /// Link the scene objects containing the indicated parts to a root object.
+ ///
+ ///
+ /// A root prim id of the object which will be the root prim of the resulting linkset.
+ /// A list of child prims for the objects that should be linked in.
public void LinkObjects(IClientAPI client, uint parentPrimId, List childPrimIds)
{
+ LinkObjects(client.AgentId, parentPrimId, childPrimIds);
+ }
+
+ ///
+ /// Link the scene objects containing the indicated parts to a root object.
+ ///
+ /// The ID of the user linking.
+ /// A root prim id of the object which will be the root prim of the resulting linkset.
+ /// A list of child prims for the objects that should be linked in.
+ public void LinkObjects(UUID agentId, uint parentPrimId, List childPrimIds)
+ {
List owners = new List();
List children = new List();
@@ -2183,7 +2200,7 @@ namespace OpenSim.Region.Framework.Scenes
return;
}
- if (!Permissions.CanLinkObject(client.AgentId, root.ParentGroup.RootPart.UUID))
+ if (!Permissions.CanLinkObject(agentId, root.ParentGroup.RootPart.UUID))
{
m_log.DebugFormat("[LINK]: Refusing link. No permissions on root prim");
return;
@@ -2199,7 +2216,7 @@ namespace OpenSim.Region.Framework.Scenes
if (!owners.Contains(part.OwnerID))
owners.Add(part.OwnerID);
- if (Permissions.CanLinkObject(client.AgentId, part.ParentGroup.RootPart.UUID))
+ if (Permissions.CanLinkObject(agentId, part.ParentGroup.RootPart.UUID))
children.Add(part);
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 7d801b5..693a79e 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -1662,6 +1662,10 @@ namespace OpenSim.Region.Framework.Scenes
{
SceneObjectGroup child = children[i].ParentGroup;
+ // Don't try and add a group to itself - this will only cause severe problems later on.
+ if (child == parentGroup)
+ continue;
+
// Make sure no child prim is set for sale
// So that, on delink, no prims are unwittingly
// left for sale and sold off
@@ -1684,11 +1688,13 @@ namespace OpenSim.Region.Framework.Scenes
// We need to explicitly resend the newly link prim's object properties since no other actions
// occur on link to invoke this elsewhere (such as object selection)
- parentGroup.RootPart.CreateSelected = true;
- parentGroup.TriggerScriptChangedEvent(Changed.LINK);
- parentGroup.HasGroupChanged = true;
- parentGroup.ScheduleGroupForFullUpdate();
-
+ if (childGroups.Count > 0)
+ {
+ parentGroup.RootPart.CreateSelected = true;
+ parentGroup.TriggerScriptChangedEvent(Changed.LINK);
+ parentGroup.HasGroupChanged = true;
+ parentGroup.ScheduleGroupForFullUpdate();
+ }
}
finally
{
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index b724135..5b838f8 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1961,6 +1961,10 @@ namespace OpenSim.Region.Framework.Scenes
// "[SCENE OBJECT GROUP]: Linking group with root part {0}, {1} to group with root part {2}, {3}",
// objectGroup.RootPart.Name, objectGroup.RootPart.UUID, RootPart.Name, RootPart.UUID);
+ // Linking to ourselves is not a valid operation.
+ if (objectGroup == this)
+ return;
+
SceneObjectPart linkPart = objectGroup.m_rootPart;
Vector3 oldGroupPosition = linkPart.GroupPosition;
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs
index a2332bb..be5b4a8 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs
@@ -39,14 +39,31 @@ using log4net;
namespace OpenSim.Region.Framework.Scenes.Tests
{
- ///
- /// Linking tests
- ///
[TestFixture]
public class SceneObjectLinkingTests
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ ///
+ /// Links to self should be ignored.
+ ///
+ [Test]
+ public void TestLinkToSelf()
+ {
+ TestHelpers.InMethod();
+
+ UUID ownerId = TestHelpers.ParseTail(0x1);
+ int nParts = 3;
+
+ TestScene scene = SceneHelpers.SetupScene();
+ SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(nParts, ownerId, "TestLinkToSelf_", 0x10);
+ scene.AddSceneObject(sog1);
+ scene.LinkObjects(ownerId, sog1.LocalId, new List() { sog1.Parts[1].LocalId });
+// sog1.LinkToGroup(sog1);
+
+ Assert.That(sog1.Parts.Length, Is.EqualTo(nParts));
+ }
+
[Test]
public void TestLinkDelink2SceneObjects()
{
--
cgit v1.1
From dbe32a1f6d148d16c462b3b7d5a6c507743a5f9a Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 9 Feb 2012 00:10:45 +0000
Subject: minor: put in commented out logging statements for future reuse
---
OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs | 3 +++
OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | 8 +++++++-
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index 6a48b89..8701431 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -292,13 +292,16 @@ namespace OpenSim.Region.OptionalModules.World.NPC
NPCAvatar av;
if (m_avatars.TryGetValue(agentID, out av))
{
+// m_log.DebugFormat("[NPC MODULE]: Found {0} {1} to remove", agentID, av.Name);
scene.RemoveClient(agentID, false);
m_avatars.Remove(agentID);
+// m_log.DebugFormat("[NPC MODULE]: Removed {0} {1}", agentID, av.Name);
return true;
}
}
+// m_log.DebugFormat("[NPC MODULE]: Could not find {0} to remove", agentID);
return false;
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 9b93135..bc1902b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -537,6 +537,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
public bool Stop(int timeout)
{
+// m_log.DebugFormat(
+// "[SCRIPT INSTANCE]: Stopping script {0} {1} with timeout {2}", ScriptName, ItemID, timeout);
+
IScriptWorkItem result;
lock (m_EventQueue)
@@ -769,7 +772,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
}
catch (Exception e)
{
- // m_log.DebugFormat("[SCRIPT] Exception: {0}", e.Message);
+// m_log.DebugFormat(
+// "[SCRIPT] Exception in script {0} {1}: {2}{3}",
+// ScriptName, ItemID, e.Message, e.StackTrace);
+
m_InEvent = false;
m_CurrentEvent = String.Empty;
--
cgit v1.1
From 16c46360486cddb3968d12857e0f84c7cb9ede55 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 9 Feb 2012 00:38:09 +0000
Subject: Add NPC torture tests for 100, 1000 and 2000 create and delete NPC
calls.
---
OpenSim/Tests/Torture/NPCTortureTests.cs | 185 +++++++++++++++++++++++++++++++
prebuild.xml | 3 +
2 files changed, 188 insertions(+)
create mode 100644 OpenSim/Tests/Torture/NPCTortureTests.cs
diff --git a/OpenSim/Tests/Torture/NPCTortureTests.cs b/OpenSim/Tests/Torture/NPCTortureTests.cs
new file mode 100644
index 0000000..8078d9d
--- /dev/null
+++ b/OpenSim/Tests/Torture/NPCTortureTests.cs
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Reflection;
+using log4net;
+using Nini.Config;
+using NUnit.Framework;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Framework.Communications;
+using OpenSim.Region.CoreModules.Avatar.Attachments;
+using OpenSim.Region.CoreModules.Avatar.AvatarFactory;
+using OpenSim.Region.CoreModules.Framework.InventoryAccess;
+using OpenSim.Region.CoreModules.Framework.UserManagement;
+using OpenSim.Region.CoreModules.ServiceConnectorsOut.Avatar;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Region.OptionalModules.World.NPC;
+using OpenSim.Services.AvatarService;
+using OpenSim.Tests.Common;
+using OpenSim.Tests.Common.Mock;
+
+namespace OpenSim.Tests.Torture
+{
+ ///
+ /// NPC torture tests
+ ///
+ ///
+ /// Don't rely on the numbers given by these tests - they will vary a lot depending on what is already cached,
+ /// how much memory is free, etc. In some cases, later larger tests will apparently take less time than smaller
+ /// earlier tests.
+ ///
+ [TestFixture]
+ public class NPCTortureTests
+ {
+ private TestScene scene;
+ private AvatarFactoryModule afm;
+ private UserManagementModule umm;
+ private AttachmentsModule am;
+
+ [TestFixtureSetUp]
+ public void FixtureInit()
+ {
+ // Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread.
+ Util.FireAndForgetMethod = FireAndForgetMethod.None;
+ }
+
+ [TestFixtureTearDown]
+ public void TearDown()
+ {
+ // We must set this back afterwards, otherwise later tests will fail since they're expecting multiple
+ // threads. Possibly, later tests should be rewritten not to worry about such things.
+ Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
+ }
+
+ [SetUp]
+ public void Init()
+ {
+ IConfigSource config = new IniConfigSource();
+ config.AddConfig("NPC");
+ config.Configs["NPC"].Set("Enabled", "true");
+ config.AddConfig("Modules");
+ config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule");
+
+ afm = new AvatarFactoryModule();
+ umm = new UserManagementModule();
+ am = new AttachmentsModule();
+
+ scene = SceneHelpers.SetupScene();
+ SceneHelpers.SetupSceneModules(scene, config, afm, umm, am, new BasicInventoryAccessModule(), new NPCModule());
+ }
+
+ [Test]
+ public void TestAddRemove100NPCs()
+ {
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ TestAddRemoveNPCs(100);
+ }
+
+ [Test]
+ public void TestAddRemove1000NPCs()
+ {
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ TestAddRemoveNPCs(1000);
+ }
+
+ [Test]
+ public void TestAddRemove2000NPCs()
+ {
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ TestAddRemoveNPCs(2000);
+ }
+
+ private void TestAddRemoveNPCs(int numberOfNpcs)
+ {
+ ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1));
+// ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId);
+
+ // 8 is the index of the first baked texture in AvatarAppearance
+ UUID originalFace8TextureId = TestHelpers.ParseTail(0x10);
+ Primitive.TextureEntry originalTe = new Primitive.TextureEntry(UUID.Zero);
+ Primitive.TextureEntryFace originalTef = originalTe.CreateFace(8);
+ originalTef.TextureID = originalFace8TextureId;
+
+ // We also need to add the texture to the asset service, otherwise the AvatarFactoryModule will tell
+ // ScenePresence.SendInitialData() to reset our entire appearance.
+ scene.AssetService.Store(AssetHelpers.CreateNotecardAsset(originalFace8TextureId));
+
+ afm.SetAppearance(sp, originalTe, null);
+
+ INPCModule npcModule = scene.RequestModuleInterface();
+
+ List npcs = new List();
+
+ long startGcMemory = GC.GetTotalMemory(true);
+ Stopwatch sw = new Stopwatch();
+ sw.Start();
+
+ for (int i = 0; i < numberOfNpcs; i++)
+ {
+ npcs.Add(
+ npcModule.CreateNPC("John", "Smith", new Vector3(128, 128, 30), UUID.Zero, true, scene, sp.Appearance));
+ }
+
+ for (int i = 0; i < numberOfNpcs; i++)
+ {
+ Assert.That(npcs[i], Is.Not.Null);
+
+ ScenePresence npc = scene.GetScenePresence(npcs[i]);
+ Assert.That(npc, Is.Not.Null);
+ }
+
+ for (int i = 0; i < numberOfNpcs; i++)
+ {
+ Assert.That(npcModule.DeleteNPC(npcs[i], scene), Is.True);
+ ScenePresence npc = scene.GetScenePresence(npcs[i]);
+ Assert.That(npc, Is.Null);
+ }
+
+ sw.Stop();
+
+ long endGcMemory = GC.GetTotalMemory(true);
+
+ Console.WriteLine("Took {0} ms", sw.ElapsedMilliseconds);
+ Console.WriteLine(
+ "End {0} MB, Start {1} MB, Diff {2} MB",
+ endGcMemory / 1024 / 1024,
+ startGcMemory / 1024 / 1024,
+ (endGcMemory - startGcMemory) / 1024 / 1024);
+ }
+ }
+}
\ No newline at end of file
diff --git a/prebuild.xml b/prebuild.xml
index 1bf4972..c64f1cc 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -3284,12 +3284,15 @@
+
+
+
--
cgit v1.1
From 9c84a8162f700fc2eb35018389c12fcfedc02587 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 9 Feb 2012 01:17:59 +0000
Subject: If NPCModule.CreateNPC() fails to create the required ScenePresence
(which should in theory never happen), don't add the NPC to the npc list but
return UUID.Zero instead.
---
OpenSim/Region/Framework/Interfaces/INPCModule.cs | 2 +-
OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs | 15 +++++++--------
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/OpenSim/Region/Framework/Interfaces/INPCModule.cs b/OpenSim/Region/Framework/Interfaces/INPCModule.cs
index 2731291..dc3ff89 100644
--- a/OpenSim/Region/Framework/Interfaces/INPCModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/INPCModule.cs
@@ -58,7 +58,7 @@ namespace OpenSim.Region.Framework.Interfaces
///
///
/// The avatar appearance to use for the new NPC.
- /// The UUID of the ScenePresence created.
+ /// The UUID of the ScenePresence created. UUID.Zero if there was a failure.
UUID CreateNPC(
string firstname,
string lastname,
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index 8701431..dc6eefc 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -148,22 +148,21 @@ namespace OpenSim.Region.OptionalModules.World.NPC
ScenePresence sp;
if (scene.TryGetScenePresence(npcAvatar.AgentId, out sp))
{
- m_log.DebugFormat(
- "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);
+// m_log.DebugFormat(
+// "[NPC MODULE]: Successfully retrieved scene presence for NPC {0} {1}", sp.Name, sp.UUID);
sp.CompleteMovement(npcAvatar, false);
+ m_avatars.Add(npcAvatar.AgentId, npcAvatar);
+ m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
+
+ return npcAvatar.AgentId;
}
else
{
m_log.WarnFormat("[NPC MODULE]: Could not find scene presence for NPC {0} {1}", sp.Name, sp.UUID);
+ return UUID.Zero;
}
-
- m_avatars.Add(npcAvatar.AgentId, npcAvatar);
}
-
- m_log.DebugFormat("[NPC MODULE]: Created NPC with id {0}", npcAvatar.AgentId);
-
- return npcAvatar.AgentId;
}
public bool MoveToTarget(UUID agentID, Scene scene, Vector3 pos, bool noFly, bool landAtTarget)
--
cgit v1.1
From e8cc1bd3296a5085814ef27f2c74eb709efa9acd Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 9 Feb 2012 20:12:29 +0000
Subject: Fix another Torture test build break on Windows.
---
prebuild.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/prebuild.xml b/prebuild.xml
index c64f1cc..54f42f4 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -3292,6 +3292,7 @@
+
--
cgit v1.1
From ddca5347c31aa9547395ec918b5b5dcd2e498be7 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 10 Feb 2012 02:13:15 +0000
Subject: When an asset is uploaded (e.g. a mesh) set individual
copy/move/transfer permissions, not PermissionMask.All
Setting PermissionMask.All will cause next permissions to replace current permissions when the object is rezzed, since bit 4 will be set.
This is not correct behaviour for a freshly uploaded mesh. Freshly rezzed in-world prims also do not have bit 4 set (don't yet know exactly what this is).
Should resolve http://opensimulator.org/mantis/view.php?id=5651
---
.../Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 9 +++++++--
.../Caps/NewFileAgentInventoryVariablePriceModule.cs | 10 ++++++----
.../Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs | 2 +-
.../InventoryAccess/InventoryAccessModule.cs | 19 +++++++++++++++----
OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 9 +++++++++
.../Framework/Scenes/SceneObjectGroup.Inventory.cs | 2 ++
6 files changed, 40 insertions(+), 11 deletions(-)
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index cf0c28b..be699db 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -422,7 +422,7 @@ namespace OpenSim.Region.ClientStack.Linden
string assetType)
{
m_log.DebugFormat(
- "Uploaded asset {0} for inventory item {1}, inv type {2}, asset type {3}",
+ "[BUNCH OF CAPS]: Uploaded asset {0} for inventory item {1}, inv type {2}, asset type {3}",
assetID, inventoryItem, inventoryType, assetType);
sbyte assType = 0;
@@ -625,7 +625,12 @@ namespace OpenSim.Region.ClientStack.Linden
item.AssetType = assType;
item.InvType = inType;
item.Folder = parentFolder;
- item.CurrentPermissions = (uint)PermissionMask.All;
+
+ // If we set PermissionMask.All then when we rez the item the next permissions will replace the current
+ // (owner) permissions. This becomes a problem if next permissions are changed.
+ item.CurrentPermissions
+ = (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer);
+
item.BasePermissions = (uint)PermissionMask.All;
item.EveryOnePermissions = 0;
item.NextPermissions = (uint)PermissionMask.All;
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/NewFileAgentInventoryVariablePriceModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/NewFileAgentInventoryVariablePriceModule.cs
index aed03b3..1117f2a 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/NewFileAgentInventoryVariablePriceModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/NewFileAgentInventoryVariablePriceModule.cs
@@ -50,8 +50,7 @@ namespace OpenSim.Region.ClientStack.Linden
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
public class NewFileAgentInventoryVariablePriceModule : INonSharedRegionModule
{
-// private static readonly ILog m_log =
-// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Scene m_scene;
// private IAssetService m_assetService;
@@ -210,6 +209,9 @@ namespace OpenSim.Region.ClientStack.Linden
UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType,
string assetType,UUID AgentID)
{
+// m_log.DebugFormat(
+// "[NEW FILE AGENT INVENTORY VARIABLE PRICE MODULE]: Upload complete for {0}", inventoryItem);
+
sbyte assType = 0;
sbyte inType = 0;
@@ -259,13 +261,13 @@ namespace OpenSim.Region.ClientStack.Linden
item.AssetType = assType;
item.InvType = inType;
item.Folder = parentFolder;
- item.CurrentPermissions = (uint)PermissionMask.All;
+ item.CurrentPermissions
+ = (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer);
item.BasePermissions = (uint)PermissionMask.All;
item.EveryOnePermissions = 0;
item.NextPermissions = (uint)PermissionMask.All;
item.CreationDate = Util.UnixTimeSinceEpoch();
m_scene.AddInventoryItem(item);
-
}
}
}
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs
index e4bacd4..7a3d97e 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/UploadObjectAssetModule.cs
@@ -339,7 +339,7 @@ namespace OpenSim.Region.ClientStack.Linden
m_scene.AddSceneObject(grp);
grp.AbsolutePosition = obj.Position;
}
-
+
allparts[i] = grp;
}
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 54b422b..8b5b1a7 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -789,6 +789,12 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
{
group = objlist[i];
+// m_log.DebugFormat(
+// "[InventoryAccessModule]: Preparing to rez {0} {1} {2} ownermask={3:X} nextownermask={4:X} groupmask={5:X} everyonemask={6:X} for {7}",
+// group.Name, group.LocalId, group.UUID,
+// group.RootPart.OwnerMask, group.RootPart.NextOwnerMask, group.RootPart.GroupMask, group.RootPart.EveryoneMask,
+// remoteClient.Name);
+
// Vector3 storedPosition = group.AbsolutePosition;
if (group.UUID == UUID.Zero)
{
@@ -854,9 +860,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
rootPart.ScheduleFullUpdate();
}
-// m_log.DebugFormat(
-// "[InventoryAccessModule]: Rezzed {0} {1} {2} for {3}",
-// group.Name, group.LocalId, group.UUID, remoteClient.Name);
+// m_log.DebugFormat(
+// "[InventoryAccessModule]: Rezzed {0} {1} {2} ownermask={3:X} nextownermask={4:X} groupmask={5:X} everyonemask={6:X} for {7}",
+// group.Name, group.LocalId, group.UUID,
+// group.RootPart.OwnerMask, group.RootPart.NextOwnerMask, group.RootPart.GroupMask, group.RootPart.EveryoneMask,
+// remoteClient.Name);
}
if (item != null)
@@ -937,7 +945,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
}
rootPart.FromFolderID = item.Folder;
-
+
+// Console.WriteLine("rootPart.OwnedID {0}, item.Owner {1}, item.CurrentPermissions {2:X}",
+// rootPart.OwnerID, item.Owner, item.CurrentPermissions);
+
if ((rootPart.OwnerID != item.Owner) ||
(item.CurrentPermissions & 16) != 0)
{
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index af01624..5a5307c 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -347,6 +347,12 @@ namespace OpenSim.Region.Framework.Scenes
{
item.Name = itemUpd.Name;
item.Description = itemUpd.Description;
+
+// m_log.DebugFormat(
+// "[USER INVENTORY]: itemUpd {0} {1} {2} {3}, item {4} {5} {6} {7}",
+// itemUpd.NextPermissions, itemUpd.GroupPermissions, itemUpd.EveryOnePermissions, item.Flags,
+// item.NextPermissions, item.GroupPermissions, item.EveryOnePermissions, item.CurrentPermissions);
+
if (item.NextPermissions != (itemUpd.NextPermissions & item.BasePermissions))
item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner;
item.NextPermissions = itemUpd.NextPermissions & item.BasePermissions;
@@ -355,6 +361,9 @@ namespace OpenSim.Region.Framework.Scenes
item.EveryOnePermissions = itemUpd.EveryOnePermissions & item.BasePermissions;
if (item.GroupPermissions != (itemUpd.GroupPermissions & item.BasePermissions))
item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteGroup;
+
+// m_log.DebugFormat("[USER INVENTORY]: item.Flags {0}", item.Flags);
+
item.GroupPermissions = itemUpd.GroupPermissions & item.BasePermissions;
item.GroupID = itemUpd.GroupID;
item.GroupOwned = itemUpd.GroupOwned;
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
index f173c95..a73d9b6 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
@@ -265,6 +265,8 @@ namespace OpenSim.Region.Framework.Scenes
public void ApplyNextOwnerPermissions()
{
+// m_log.DebugFormat("[PRIM INVENTORY]: Applying next owner permissions to {0} {1}", Name, UUID);
+
SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++)
parts[i].ApplyNextOwnerPermissions();
--
cgit v1.1
From 7273e05995671175d5175558ed72dd1cb331cacb Mon Sep 17 00:00:00 2001
From: PixelTomsen
Date: Wed, 8 Feb 2012 21:45:00 +0100
Subject: Fix: Unable to remove AV from friend list (sqldb-bug)
http://opensimulator.org/mantis/view.php?id=3731
---
OpenSim/Data/SQLite/SQLiteFriendsData.cs | 2 +-
OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/OpenSim/Data/SQLite/SQLiteFriendsData.cs b/OpenSim/Data/SQLite/SQLiteFriendsData.cs
index b14c348..5f68977 100644
--- a/OpenSim/Data/SQLite/SQLiteFriendsData.cs
+++ b/OpenSim/Data/SQLite/SQLiteFriendsData.cs
@@ -75,7 +75,7 @@ namespace OpenSim.Data.SQLite
cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
cmd.Parameters.AddWithValue(":Friend", friend);
- ExecuteNonQuery(cmd, cmd.Connection);
+ ExecuteNonQuery(cmd, m_Connection);
return true;
}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 8273c6f..ff96f4d 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -5107,7 +5107,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
AddLocalPacketHandler(PacketType.ImprovedInstantMessage, HandlerImprovedInstantMessage, false);
AddLocalPacketHandler(PacketType.AcceptFriendship, HandlerAcceptFriendship);
AddLocalPacketHandler(PacketType.DeclineFriendship, HandlerDeclineFriendship);
- AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFrendship);
+ AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFriendship);
AddLocalPacketHandler(PacketType.RezObject, HandlerRezObject);
AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject);
AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand);
@@ -5827,7 +5827,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return true;
}
- private bool HandlerTerminateFrendship(IClientAPI sender, Packet Pack)
+ private bool HandlerTerminateFriendship(IClientAPI sender, Packet Pack)
{
TerminateFriendshipPacket tfriendpack = (TerminateFriendshipPacket)Pack;
@@ -5842,13 +5842,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
UUID listOwnerAgentID = tfriendpack.AgentData.AgentID;
UUID exFriendID = tfriendpack.ExBlock.OtherID;
-
- FriendshipTermination handlerTerminateFriendship = OnTerminateFriendship;
- if (handlerTerminateFriendship != null)
+ FriendshipTermination TerminateFriendshipHandler = OnTerminateFriendship;
+ if (TerminateFriendshipHandler != null)
{
- handlerTerminateFriendship(this, listOwnerAgentID, exFriendID);
+ TerminateFriendshipHandler(this, listOwnerAgentID, exFriendID);
+ return true;
}
- return true;
+ return false;
}
private bool HandleFindAgent(IClientAPI client, Packet Packet)
--
cgit v1.1
From 44d84bc2779165e75224975e83ca4539a00e9d24 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 10 Feb 2012 19:58:34 +0000
Subject: Fix bug where somebody taking a copy of an object they didn't own
that was rezzed before the region was restarted would wrongly place the copy
in the object owner's inventory.
Addresses http://opensimulator.org/mantis/view.php?id=5825
---
.../Framework/InventoryAccess/InventoryAccessModule.cs | 12 ++++++++++--
.../Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs | 3 ++-
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 8b5b1a7..63ba3d3 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -546,12 +546,20 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
return null;
userID = remoteClient.AgentId;
+
+// m_log.DebugFormat(
+// "[INVENTORY ACCESS MODULE]: Target of {0} in CreateItemForObject() is {1} {2}",
+// action, remoteClient.Name, userID);
}
else
{
// All returns / deletes go to the object owner
//
userID = so.RootPart.OwnerID;
+
+// m_log.DebugFormat(
+// "[INVENTORY ACCESS MODULE]: Target of {0} in CreateItemForObject() is object owner {1}",
+// action, userID);
}
if (userID == UUID.Zero) // Can't proceed
@@ -637,11 +645,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
}
// Override and put into where it came from, if it came
- // from anywhere in inventory
+ // from anywhere in inventory and the owner is taking it back.
//
if (action == DeRezAction.Take || action == DeRezAction.TakeCopy)
{
- if (so.RootPart.FromFolderID != UUID.Zero)
+ if (so.RootPart.FromFolderID != UUID.Zero && userID == remoteClient.AgentId)
{
InventoryFolderBase f = new InventoryFolderBase(so.RootPart.FromFolderID, userID);
folder = m_Scene.InventoryService.GetFolder(f);
diff --git a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
index 5dfd3e0..f678d07 100644
--- a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
+++ b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
@@ -148,7 +148,8 @@ namespace OpenSim.Region.Framework.Scenes
x = m_inventoryDeletes.Dequeue();
m_log.DebugFormat(
- "[ASYNC DELETER]: Sending object to user's inventory, action {1}, count {2}, {0} item(s) remaining.", left, x.action, x.objectGroups.Count);
+ "[ASYNC DELETER]: Sending object to user's inventory, action {1}, count {2}, {0} item(s) remaining.",
+ left, x.action, x.objectGroups.Count);
try
{
--
cgit v1.1
From a7dc7e636e3de9028668a6c570c6a713d4cd729b Mon Sep 17 00:00:00 2001
From: PixelTomsen
Date: Fri, 10 Feb 2012 21:18:43 +0100
Subject: Fix: Covenant view fails after updates or cache-clean see mantis
http://opensimulator.org/mantis/view.php?id=2879
Signed-off-by: BlueWall
---
OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index ff96f4d..d98ff68 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -7625,6 +7625,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
}
}
+ else
+ if (transfer.TransferInfo.SourceType == (int)SourceType.SimEstate)
+ {
+ //TransferRequestPacket does not include covenant uuid?
+ //get scene covenant uuid
+ taskID = m_scene.RegionInfo.RegionSettings.Covenant;
+ }
MakeAssetRequest(transfer, taskID);
@@ -11985,6 +11992,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
requestID = new UUID(transferRequest.TransferInfo.Params, 80);
}
+ else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimEstate)
+ {
+ requestID = taskID;
+ }
+
// m_log.DebugFormat("[CLIENT]: {0} requesting asset {1}", Name, requestID);
--
cgit v1.1
From b3d152f3ba5cb07c005b0163c752f2c0f97c0034 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 10 Feb 2012 21:26:05 +0000
Subject: Fix an npc delete race condition with LSL sensors where an initial
presence check could succeed but then the npc removed before the subequent
npc check.
The resulting null would cause an exception. We now check for null before looking at SenseAsAgent.
Hopefully fixes http://opensimulator.org/mantis/view.php?id=5872
---
.../Api/Implementation/Plugins/SensorRepeat.cs | 29 +++++++++++++++-------
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
index 3e0e452..850f50b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
@@ -445,17 +445,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
Vector3 toRegionPos;
double dis;
- Action senseEntity = new Action(delegate(ScenePresence presence)
+ Action senseEntity = new Action(presence =>
{
- if ((ts.type & NPC) == 0
- && presence.PresenceType == PresenceType.Npc
- && !npcModule.GetNPC(presence.UUID, presence.Scene).SenseAsAgent)
- return;
+ if ((ts.type & NPC) == 0 && presence.PresenceType == PresenceType.Npc)
+ {
+ INPC npcData = npcModule.GetNPC(presence.UUID, presence.Scene);
+ if (npcData == null || !npcData.SenseAsAgent)
+ return;
+ }
- if ((ts.type & AGENT) == 0
- && (presence.PresenceType == PresenceType.User
- || npcModule.GetNPC(presence.UUID, presence.Scene).SenseAsAgent))
- return;
+ if ((ts.type & AGENT) == 0)
+ {
+ if (presence.PresenceType == PresenceType.User)
+ {
+ return;
+ }
+ else
+ {
+ INPC npcData = npcModule.GetNPC(presence.UUID, presence.Scene);
+ if (npcData != null && npcData.SenseAsAgent)
+ return;
+ }
+ }
if (presence.IsDeleted || presence.IsChildAgent || presence.GodLevel > 0.0)
return;
--
cgit v1.1
From d80422eba7a4c75f6947ab9186d652b0a31b845e Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 10 Feb 2012 23:39:32 +0000
Subject: Add line numbers to Util.PrintCallStack()
---
OpenSim/Framework/Util.cs | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index ed92b2d..4b0b13c 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -1664,13 +1664,14 @@ namespace OpenSim.Framework
///
public static void PrintCallStack()
{
- StackTrace stackTrace = new StackTrace(); // get call stack
+ StackTrace stackTrace = new StackTrace(true); // get call stack
StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames)
// write call stack method names
foreach (StackFrame stackFrame in stackFrames)
{
- m_log.Debug(stackFrame.GetMethod().DeclaringType + "." + stackFrame.GetMethod().Name); // write method name
+ MethodBase mb = stackFrame.GetMethod();
+ m_log.DebugFormat("{0}.{1}:{2}", mb.DeclaringType, mb.Name, stackFrame.GetFileLineNumber()); // write method name
}
}
--
cgit v1.1
From 71e484516a0323187077c734d5b30d2839ebab99 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 10 Feb 2012 23:41:14 +0000
Subject: minor: Remove warning from RegionInfo due to repeated
config.GetString() call where the first was unused.
---
OpenSim/Framework/RegionInfo.cs | 1 -
1 file changed, 1 deletion(-)
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index 661b457..5ba3863 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -625,7 +625,6 @@ namespace OpenSim.Framework
foreach (String s in allKeys)
{
- string val = config.GetString(s);
SetOtherSetting(s, config.GetString(s));
}
}
--
cgit v1.1
From 5023cc86f095d7d3f25213ff63c4e1fcaf6c4e92 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Fri, 10 Feb 2012 23:52:06 +0000
Subject: Change parser to leave embedded quotes alone if the pattern is
recognized as an OptionSet long option
---
OpenSim/Framework/Console/CommandConsole.cs | 34 +++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/OpenSim/Framework/Console/CommandConsole.cs b/OpenSim/Framework/Console/CommandConsole.cs
index a0d3541..0d6288b 100644
--- a/OpenSim/Framework/Console/CommandConsole.cs
+++ b/OpenSim/Framework/Console/CommandConsole.cs
@@ -31,6 +31,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Text;
+using System.Text.RegularExpressions;
using System.Threading;
using log4net;
using OpenSim.Framework;
@@ -531,6 +532,11 @@ namespace OpenSim.Framework.Console
public class Parser
{
+ // If an unquoted portion ends with an element matching this regex
+ // and the next element contains a space, then we have stripped
+ // embedded quotes that should not have been stripped
+ private static Regex optionRegex = new Regex("^--[a-zA-Z0-9-]+=$");
+
public static string[] Parse(string text)
{
List result = new List();
@@ -544,10 +550,38 @@ namespace OpenSim.Framework.Console
if (index % 2 == 0)
{
string[] words = unquoted[index].Split(new char[] {' '});
+
+ bool option = false;
foreach (string w in words)
{
if (w != String.Empty)
+ {
+ if (optionRegex.Match(w) == Match.Empty)
+ option = false;
+ else
+ option = true;
result.Add(w);
+ }
+ }
+ // The last item matched the regex, put the quotes back
+ if (option)
+ {
+ // If the line ended with it, don't do anything
+ if (index < (unquoted.Length - 1))
+ {
+ // Get and remove the option name
+ string optionText = result[result.Count - 1];
+ result.RemoveAt(result.Count - 1);
+
+ // Add the quoted value back
+ optionText += "\"" + unquoted[index + 1] + "\"";
+
+ // Push the result into our return array
+ result.Add(optionText);
+
+ // Skip the already used value
+ index++;
+ }
}
}
else
--
cgit v1.1
From e7fd7322095d518ccd7b446cf5c0683ef8009793 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 11 Feb 2012 00:10:59 +0000
Subject: Make ScenePresence.MovementFlag a private only settable value to
reduce complexity of code analysis
---
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 5c56150..77f7b32 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -291,13 +291,10 @@ namespace OpenSim.Region.Framework.Scenes
///
public PhysicsActor PhysicsActor { get; private set; }
- private byte m_movementflag;
-
- public byte MovementFlag
- {
- set { m_movementflag = value; }
- get { return m_movementflag; }
- }
+ ///
+ /// Record user movement inputs.
+ ///
+ public byte MovementFlag { get; private set; }
private bool m_updateflag;
--
cgit v1.1
From f49897a4195df5fbd00e2c16461bcebb36ce8f72 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 11 Feb 2012 02:26:53 +0000
Subject: Clamp ODE character velocity. Make ODE falling character 54m/s by
default.
If velocity reaches 256 in any vector then bad things happen with ODE, so we now clamp this value.
In addition, a falling avatar is clamped by default at 54 m/s, which is the same as a falling skydiver.
This also appears to be the value used on the linden lab grid.
This should resolve http://opensimulator.org/mantis/view.php?id=5882
---
OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 43 +++++++++++++++++++++++-
OpenSim/Region/Physics/OdePlugin/OdeScene.cs | 11 ++++++
bin/OpenSimDefaults.ini | 5 +++
3 files changed, 58 insertions(+), 1 deletion(-)
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index 7c1c046..6d1f41d 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -156,6 +156,22 @@ namespace OpenSim.Region.Physics.OdePlugin
internal UUID m_uuid { get; private set; }
internal bool bad = false;
+ ///
+ /// ODE Avatar.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Only used right now to return information to LSL. Not actually used to set mass in ODE!
+ ///
+ ///
+ ///
public OdeCharacter(
String avName, OdeScene parent_scene, Vector3 pos, Vector3 size, float pid_d, float pid_p,
float capsule_radius, float tensor, float density,
@@ -786,6 +802,10 @@ namespace OpenSim.Region.Physics.OdePlugin
Vector3 vec = Vector3.Zero;
d.Vector3 vel = d.BodyGetLinearVel(Body);
+// m_log.DebugFormat(
+// "[ODE CHARACTER]: Current velocity in Move() is <{0},{1},{2}>, target {3} for {4}",
+// vel.X, vel.Y, vel.Z, _target_velocity, Name);
+
float movementdivisor = 1f;
if (!m_alwaysRun)
@@ -884,18 +904,20 @@ namespace OpenSim.Region.Physics.OdePlugin
if (flying)
{
+ // This also acts as anti-gravity so that we hover when flying rather than fall.
vec.Z = (_target_velocity.Z - vel.Z) * (PID_D);
}
}
if (flying)
{
+ // Anti-gravity so that we hover when flying rather than fall.
vec.Z += ((-1 * _parent_scene.gravityz) * m_mass);
//Added for auto fly height. Kitto Flora
//d.Vector3 pos = d.BodyGetPosition(Body);
float target_altitude = _parent_scene.GetTerrainHeightAtXY(_position.X, _position.Y) + MinimumGroundFlightOffset;
-
+
if (_position.Z < target_altitude)
{
vec.Z += (target_altitude - _position.Z) * PID_P * 5.0f;
@@ -921,6 +943,25 @@ namespace OpenSim.Region.Physics.OdePlugin
return;
}
+
+ d.Vector3 newVel = d.BodyGetLinearVel(Body);
+ if (newVel.X >= 256 || newVel.X <= 256 || newVel.Y >= 256 || newVel.Y <= 256 || newVel.Z >= 256 || newVel.Z <= 256)
+ {
+// m_log.DebugFormat(
+// "[ODE CHARACTER]: Limiting falling velocity from {0} to {1} for {2}", newVel.Z, -9.8, Name);
+
+ newVel.X = Util.Clamp(newVel.X, -255f, 255f);
+ newVel.Y = Util.Clamp(newVel.Y, -255f, 255f);
+
+ if (!flying)
+ newVel.Z
+ = Util.Clamp(
+ newVel.Z, -_parent_scene.AvatarTerminalVelocity, _parent_scene.AvatarTerminalVelocity);
+ else
+ newVel.Z = Util.Clamp(newVel.Z, -255f, 255f);
+
+ d.BodySetLinearVel(Body, newVel.X, newVel.Y, newVel.Z);
+ }
}
///
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
index 4530c09..7d1401c 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
@@ -144,6 +144,8 @@ namespace OpenSim.Region.Physics.OdePlugin
public float gravityy = 0f;
public float gravityz = -9.8f;
+ public float AvatarTerminalVelocity { get; set; }
+
private float contactsurfacelayer = 0.001f;
private int worldHashspaceLow = -4;
@@ -459,6 +461,15 @@ namespace OpenSim.Region.Physics.OdePlugin
gravityy = physicsconfig.GetFloat("world_gravityy", 0f);
gravityz = physicsconfig.GetFloat("world_gravityz", -9.8f);
+ float avatarTerminalVelocity = physicsconfig.GetFloat("avatar_terminal_velocity", 9f);
+ AvatarTerminalVelocity = Util.Clamp(avatarTerminalVelocity, 0, 255f);
+ if (AvatarTerminalVelocity != avatarTerminalVelocity)
+ {
+ m_log.WarnFormat(
+ "[ODE SCENE]: avatar_terminal_velocity of {0} is invalid. Clamping to {1}",
+ avatarTerminalVelocity, AvatarTerminalVelocity);
+ }
+
worldHashspaceLow = physicsconfig.GetInt("world_hashspace_size_low", -4);
worldHashspaceHigh = physicsconfig.GetInt("world_hashspace_size_high", 128);
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 62fe9d4..3fd3d31 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -655,6 +655,11 @@
world_gravityy = 0
world_gravityz = -9.8
+ ; Terminal velocity of a falling avatar
+ ; This is the same http://en.wikipedia.org/wiki/Terminal_velocity#Examples
+ ; Max value is 255, min value is 0
+ avatar_terminal_velocity = 54
+
; World Step size. (warning these are dangerous. Changing these will probably cause your scene to explode dramatically)
; reference: fps = (0.089/ODE_STEPSIZE) * 1000;
world_stepsize = 0.0178
--
cgit v1.1
From b92b9228ef5c7833dac019aba12babb5df954d35 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 11 Feb 2012 02:29:07 +0000
Subject: correct the default avatar_terminal_velocity value that I
accidentally left in whilst testing
---
OpenSim/Region/Physics/OdePlugin/OdeScene.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
index 7d1401c..598530c 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
@@ -461,7 +461,7 @@ namespace OpenSim.Region.Physics.OdePlugin
gravityy = physicsconfig.GetFloat("world_gravityy", 0f);
gravityz = physicsconfig.GetFloat("world_gravityz", -9.8f);
- float avatarTerminalVelocity = physicsconfig.GetFloat("avatar_terminal_velocity", 9f);
+ float avatarTerminalVelocity = physicsconfig.GetFloat("avatar_terminal_velocity", 54f);
AvatarTerminalVelocity = Util.Clamp(avatarTerminalVelocity, 0, 255f);
if (AvatarTerminalVelocity != avatarTerminalVelocity)
{
--
cgit v1.1
From 189c67db957cadfe1bb5bd8aad0c86dec1ff295b Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 13 Feb 2012 20:43:26 +0000
Subject: On object deserialization, go back to logging errors at DEBUG level
rather than ERROR. Restore extra log message if shape processing fails.
Logging level was DEBUG before 312e145 (Fri Feb 3 2012).
312e145 also accidentally removed the 'general error' log message if any shape deserialization failed.
This commit restores it, though this has no functional impact.
---
.../External/ExternalRepresentationUtils.cs | 19 +++++++++++++------
.../Scenes/Serialization/SceneObjectSerializer.cs | 14 +++++++++-----
2 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs b/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs
index a392af6..c56f213 100644
--- a/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs
+++ b/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs
@@ -49,15 +49,16 @@ namespace OpenSim.Framework.Serialization.External
///
/// /param>
///
- public static void ExecuteReadProcessors(
+ /// true on successful, false if there were any processing failures
+ public static bool ExecuteReadProcessors(
NodeType nodeToFill, Dictionary> processors, XmlTextReader xtr)
{
- ExecuteReadProcessors(
+ return ExecuteReadProcessors(
nodeToFill,
processors,
xtr,
(o, name, e)
- => m_log.ErrorFormat(
+ => m_log.DebugFormat(
"[ExternalRepresentationUtils]: Exception while parsing element {0}, continuing. Exception {1}{2}",
name, e.Message, e.StackTrace));
}
@@ -71,12 +72,15 @@ namespace OpenSim.Framework.Serialization.External
///
/// Action to take if there is a parsing problem. This will usually just be to log the exception
///
- public static void ExecuteReadProcessors(
+ /// true on successful, false if there were any processing failures
+ public static bool ExecuteReadProcessors(
NodeType nodeToFill,
Dictionary> processors,
XmlTextReader xtr,
Action parseExceptionAction)
{
+ bool errors = false;
+
string nodeName = string.Empty;
while (xtr.NodeType != XmlNodeType.EndElement)
{
@@ -95,6 +99,7 @@ namespace OpenSim.Framework.Serialization.External
}
catch (Exception e)
{
+ errors = true;
parseExceptionAction(nodeToFill, nodeName, e);
if (xtr.NodeType == XmlNodeType.EndElement)
@@ -107,6 +112,8 @@ namespace OpenSim.Framework.Serialization.External
xtr.ReadOuterXml(); // ignore
}
}
+
+ return errors;
}
///
@@ -140,6 +147,7 @@ namespace OpenSim.Framework.Serialization.External
UUID.TryParse(node.InnerText, out uuid);
creator = userService.GetUserAccount(scopeID, uuid);
}
+
if (node.Name == "CreatorData" && node.InnerText != null && node.InnerText != string.Empty)
hasCreatorData = true;
@@ -163,7 +171,6 @@ namespace OpenSim.Framework.Serialization.External
doc.Save(wr);
return wr.ToString();
}
-
}
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index ab02f92..0a32214 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -1470,7 +1470,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
m_SOPXmlProcessors,
reader,
(o, nodeName, e)
- => m_log.ErrorFormat(
+ => m_log.DebugFormat(
"[SceneObjectSerializer]: Exception while parsing {0} in object {1} {2}: {3}{4}",
((SceneObjectPart)o).Name, ((SceneObjectPart)o).UUID, nodeName, e.Message, e.StackTrace));
@@ -1535,14 +1535,18 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
reader.ReadStartElement(name, String.Empty); // Shape
- ExternalRepresentationUtils.ExecuteReadProcessors(
+ errors = ExternalRepresentationUtils.ExecuteReadProcessors(
shape,
m_ShapeXmlProcessors,
reader,
(o, nodeName, e)
- => m_log.ErrorFormat(
- "[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}",
- nodeName, e.Message, e.StackTrace));
+ =>
+ {
+ m_log.DebugFormat(
+ "[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}",
+ nodeName, e.Message, e.StackTrace);
+ }
+ );
reader.ReadEndElement(); // Shape
--
cgit v1.1
From 04a195266bd68f8c62129246a98aefb3201c90f1 Mon Sep 17 00:00:00 2001
From: Mic Bowman
Date: Mon, 13 Feb 2012 13:21:42 -0800
Subject: short circuit the expensive parts of the permission checking code if
the current user is the owner of an object. none of the later checks can
reverse the outcome.
---
OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index cdecd2f..f3c6a30 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -707,7 +707,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
// Object owners should be able to edit their own content
if (currentUser == objectOwner)
{
- permission = true;
+ // there is no way that later code can change this back to false
+ // so just return true immediately and short circuit the more
+ // expensive group checks
+ return true;
+
+ //permission = true;
}
else if (group.IsAttachment)
{
--
cgit v1.1
From 48b962c401057cc46bbf4d4768a21d940b306b60 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 14 Feb 2012 00:00:49 +0000
Subject: Update [XEngine] AppDomainLoading advice in OpenSim.ini.example
---
bin/OpenSim.ini.example | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index d45f72b..2e620ff 100755
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -573,10 +573,15 @@
; DeleteScriptsOnStartup = true
;; 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
+ ;; AppDomain.
+ ;;
+ ;; Setting this to false will load all script assemblies into the
+ ;; current AppDomain, which will significantly improve script loading times.
+ ;; It will also reduce initial per-script memory overhead.
+ ;;
+ ;; However, setting this to false will also prevent script DLLs from being unloaded from memory if the script is deleted.
+ ;; This may cause an OutOfMemory problem over time when avatars with scripted attachments move in and out of the region.
+ ;; Some Windows users have also reported script loading problems when AppDomainLoading = false
; AppDomainLoading = true
;# {DefaultCompileLanguage} {Enabled:true} {Default script language?} {lsl vb cs} lsl
--
cgit v1.1
From 04986bbb159754cb835ef6f698b2cc9c37f02b4b Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 14 Feb 2012 01:50:51 +0000
Subject: Add some more data to the new user connection logging for debug
purposes.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 3347822..4c8e2d2 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3272,9 +3272,9 @@ namespace OpenSim.Region.Framework.Scenes
// Don't disable this log message - it's too helpful
m_log.DebugFormat(
- "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, teleportflags {6}, position {7})",
- RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname,
- agent.AgentID, agent.circuitcode, teleportFlags, agent.startpos);
+ "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags {8}, position {9})",
+ RegionInfo.RegionName, (agent.child ? "child" : "root"),agent.firstname, agent.lastname,
+ agent.AgentID, agent.circuitcode, agent.IPAddress, agent.Viewer, teleportFlags, agent.startpos);
if (LoginsDisabled)
{
--
cgit v1.1
From 0b17a66e683f7ffca3877c1601c4179684b62144 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 14 Feb 2012 02:02:11 +0000
Subject: Add GridStore migration for MSSQL.
This is done blind since I don't use MSSQL. If this doesn't work, then one will have to wait for it to be updated for the 0.7.3 opensim release.
---
OpenSim/Data/MSSQL/Resources/GridStore.migrations | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/OpenSim/Data/MSSQL/Resources/GridStore.migrations b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
index c6342fc..a2e6e03 100644
--- a/OpenSim/Data/MSSQL/Resources/GridStore.migrations
+++ b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
@@ -235,4 +235,12 @@ CREATE NONCLUSTERED INDEX IX_regions_name ON dbo.regions
regionName
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
+COMMIT
+
+:VERSION 9
+
+BEGIN TRANSACTION
+
+ALTER TABLE regions ADD COLUMN parcelMapTexture VarChar(36) null
+
COMMIT
\ No newline at end of file
--
cgit v1.1
From 04544b4510f5405ad9abe30f2d107f5bcd8594d5 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 14 Feb 2012 02:03:23 +0000
Subject: Revert "Add GridStore migration for MSSQL."
This reverts commit 0b17a66e683f7ffca3877c1601c4179684b62144.
---
OpenSim/Data/MSSQL/Resources/GridStore.migrations | 8 --------
1 file changed, 8 deletions(-)
diff --git a/OpenSim/Data/MSSQL/Resources/GridStore.migrations b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
index a2e6e03..c6342fc 100644
--- a/OpenSim/Data/MSSQL/Resources/GridStore.migrations
+++ b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
@@ -235,12 +235,4 @@ CREATE NONCLUSTERED INDEX IX_regions_name ON dbo.regions
regionName
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
-COMMIT
-
-:VERSION 9
-
-BEGIN TRANSACTION
-
-ALTER TABLE regions ADD COLUMN parcelMapTexture VarChar(36) null
-
COMMIT
\ No newline at end of file
--
cgit v1.1
From db90dea9bdb176179675a07d95efb3e5e5f017cb Mon Sep 17 00:00:00 2001
From: PixelTomsen
Date: Mon, 13 Feb 2012 21:58:33 +0100
Subject: Fix: MSSQLDB Grid - unable to register region
http://opensimulator.org/mantis/view.php?id=5886
---
OpenSim/Data/MSSQL/Resources/GridStore.migrations | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/OpenSim/Data/MSSQL/Resources/GridStore.migrations b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
index c6342fc..de0cea7 100644
--- a/OpenSim/Data/MSSQL/Resources/GridStore.migrations
+++ b/OpenSim/Data/MSSQL/Resources/GridStore.migrations
@@ -235,4 +235,11 @@ CREATE NONCLUSTERED INDEX IX_regions_name ON dbo.regions
regionName
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
-COMMIT
\ No newline at end of file
+COMMIT
+
+:VERSION 9
+
+BEGIN TRANSACTION
+ALTER TABLE regions ADD parcelMapTexture uniqueidentifier NULL;
+
+COMMIT
--
cgit v1.1
From 33e66107be53e7f4e154251b2f881499ab596ca1 Mon Sep 17 00:00:00 2001
From: PixelTomsen
Date: Mon, 13 Feb 2012 00:58:28 +0100
Subject: Fix: Lightshare Module(Windlight)-Region settings are not applicable
for database sqlite mantis: http://opensimulator.org/mantis/view.php?id=5888
---
.../Data/SQLite/Resources/RegionStore.migrations | 70 ++
OpenSim/Data/SQLite/SQLiteSimulationData.cs | 927 ++++++++++++++-------
bin/OpenSim.ini.example | 1 -
bin/OpenSimDefaults.ini | 1 -
4 files changed, 692 insertions(+), 307 deletions(-)
diff --git a/OpenSim/Data/SQLite/Resources/RegionStore.migrations b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
index 31195af..0f40cdc 100644
--- a/OpenSim/Data/SQLite/Resources/RegionStore.migrations
+++ b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
@@ -472,3 +472,73 @@ COMMIT;
BEGIN;
ALTER TABLE regionsettings ADD COLUMN covenant_datetime INTEGER NOT NULL default 0;
COMMIT;
+
+:VERSION 23
+BEGIN;
+CREATE TABLE regionwindlight (
+ region_id VARCHAR(36) NOT NULL DEFAULT '000000-0000-0000-0000-000000000000' PRIMARY KEY,
+ water_color_r FLOAT NOT NULL DEFAULT '4.000000',
+ water_color_g FLOAT NOT NULL DEFAULT '38.000000',
+ water_color_b FLOAT NOT NULL DEFAULT '64.000000',
+ water_color_i FLOAT NOT NULL DEFAULT '1.000000',
+ water_fog_density_exponent FLOAT NOT NULL DEFAULT '4.0',
+ underwater_fog_modifier FLOAT NOT NULL DEFAULT '0.25',
+ reflection_wavelet_scale_1 FLOAT NOT NULL DEFAULT '2.0',
+ reflection_wavelet_scale_2 FLOAT NOT NULL DEFAULT '2.0',
+ reflection_wavelet_scale_3 FLOAT NOT NULL DEFAULT '2.0',
+ fresnel_scale FLOAT NOT NULL DEFAULT '0.40',
+ fresnel_offset FLOAT NOT NULL DEFAULT '0.50',
+ refract_scale_above FLOAT NOT NULL DEFAULT '0.03',
+ refract_scale_below FLOAT NOT NULL DEFAULT '0.20',
+ blur_multiplier FLOAT NOT NULL DEFAULT '0.040',
+ big_wave_direction_x FLOAT NOT NULL DEFAULT '1.05',
+ big_wave_direction_y FLOAT NOT NULL DEFAULT '-0.42',
+ little_wave_direction_x FLOAT NOT NULL DEFAULT '1.11',
+ little_wave_direction_y FLOAT NOT NULL DEFAULT '-1.16',
+ normal_map_texture VARCHAR(36) NOT NULL DEFAULT '822ded49-9a6c-f61c-cb89-6df54f42cdf4',
+ horizon_r FLOAT NOT NULL DEFAULT '0.25',
+ horizon_g FLOAT NOT NULL DEFAULT '0.25',
+ horizon_b FLOAT NOT NULL DEFAULT '0.32',
+ horizon_i FLOAT NOT NULL DEFAULT '0.32',
+ haze_horizon FLOAT NOT NULL DEFAULT '0.19',
+ blue_density_r FLOAT NOT NULL DEFAULT '0.12',
+ blue_density_g FLOAT NOT NULL DEFAULT '0.22',
+ blue_density_b FLOAT NOT NULL DEFAULT '0.38',
+ blue_density_i FLOAT NOT NULL DEFAULT '0.38',
+ haze_density FLOAT NOT NULL DEFAULT '0.70',
+ density_multiplier FLOAT NOT NULL DEFAULT '0.18',
+ distance_multiplier FLOAT NOT NULL DEFAULT '0.8',
+ max_altitude INTEGER NOT NULL DEFAULT '1605',
+ sun_moon_color_r FLOAT NOT NULL DEFAULT '0.24',
+ sun_moon_color_g FLOAT NOT NULL DEFAULT '0.26',
+ sun_moon_color_b FLOAT NOT NULL DEFAULT '0.30',
+ sun_moon_color_i FLOAT NOT NULL DEFAULT '0.30',
+ sun_moon_position FLOAT NOT NULL DEFAULT '0.317',
+ ambient_r FLOAT NOT NULL DEFAULT '0.35',
+ ambient_g FLOAT NOT NULL DEFAULT '0.35',
+ ambient_b FLOAT NOT NULL DEFAULT '0.35',
+ ambient_i FLOAT NOT NULL DEFAULT '0.35',
+ east_angle FLOAT NOT NULL DEFAULT '0.00',
+ sun_glow_focus FLOAT NOT NULL DEFAULT '0.10',
+ sun_glow_size FLOAT NOT NULL DEFAULT '1.75',
+ scene_gamma FLOAT NOT NULL DEFAULT '1.00',
+ star_brightness FLOAT NOT NULL DEFAULT '0.00',
+ cloud_color_r FLOAT NOT NULL DEFAULT '0.41',
+ cloud_color_g FLOAT NOT NULL DEFAULT '0.41',
+ cloud_color_b FLOAT NOT NULL DEFAULT '0.41',
+ cloud_color_i FLOAT NOT NULL DEFAULT '0.41',
+ cloud_x FLOAT NOT NULL DEFAULT '1.00',
+ cloud_y FLOAT NOT NULL DEFAULT '0.53',
+ cloud_density FLOAT NOT NULL DEFAULT '1.00',
+ cloud_coverage FLOAT NOT NULL DEFAULT '0.27',
+ cloud_scale FLOAT NOT NULL DEFAULT '0.42',
+ cloud_detail_x FLOAT NOT NULL DEFAULT '1.00',
+ cloud_detail_y FLOAT NOT NULL DEFAULT '0.53',
+ cloud_detail_density FLOAT NOT NULL DEFAULT '0.12',
+ cloud_scroll_x FLOAT NOT NULL DEFAULT '0.20',
+ cloud_scroll_x_lock INTEGER NOT NULL DEFAULT '0',
+ cloud_scroll_y FLOAT NOT NULL DEFAULT '0.01',
+ cloud_scroll_y_lock INTEGER NOT NULL DEFAULT '0',
+ draw_classic_clouds INTEGER NOT NULL DEFAULT '1');
+
+COMMIT;
\ No newline at end of file
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
index a313c4f..ce1b7b4 100644
--- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs
+++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
@@ -35,7 +35,7 @@ using log4net;
#if CSharpSqlite
using Community.CsharpSqlite.Sqlite;
#else
- using Mono.Data.Sqlite;
+using Mono.Data.Sqlite;
#endif
using OpenMetaverse;
using OpenMetaverse.StructuredData;
@@ -60,6 +60,7 @@ namespace OpenSim.Data.SQLite
private const string landAccessListSelect = "select distinct * from landaccesslist";
private const string regionbanListSelect = "select * from regionban";
private const string regionSettingsSelect = "select * from regionsettings";
+ private const string regionWindlightSelect = "select * from regionwindlight";
private DataSet ds;
private SqliteDataAdapter primDa;
@@ -69,9 +70,9 @@ namespace OpenSim.Data.SQLite
private SqliteDataAdapter landDa;
private SqliteDataAdapter landAccessListDa;
private SqliteDataAdapter regionSettingsDa;
+ private SqliteDataAdapter regionWindlightDa;
private SqliteConnection m_conn;
-
private String m_connectionString;
protected virtual Assembly Assembly
@@ -136,6 +137,9 @@ namespace OpenSim.Data.SQLite
SqliteCommand regionSettingsSelectCmd = new SqliteCommand(regionSettingsSelect, m_conn);
regionSettingsDa = new SqliteDataAdapter(regionSettingsSelectCmd);
+
+ SqliteCommand regionWindlightSelectCmd = new SqliteCommand(regionWindlightSelect, m_conn);
+ regionWindlightDa = new SqliteDataAdapter(regionWindlightSelectCmd);
// This actually does the roll forward assembly stuff
Migration m = new Migration(m_conn, Assembly, "RegionStore");
m.Update();
@@ -163,6 +167,9 @@ namespace OpenSim.Data.SQLite
ds.Tables.Add(createRegionSettingsTable());
setupRegionSettingsCommands(regionSettingsDa, m_conn);
+ ds.Tables.Add(createRegionWindlightTable());
+ setupRegionWindlightCommands(regionWindlightDa, m_conn);
+
// WORKAROUND: This is a work around for sqlite on
// windows, which gets really unhappy with blob columns
// that have no sample data in them. At some point we
@@ -171,63 +178,72 @@ namespace OpenSim.Data.SQLite
{
primDa.Fill(ds.Tables["prims"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on prims table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on prims table :{0}", e.Message);
}
try
{
shapeDa.Fill(ds.Tables["primshapes"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on primshapes table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on primshapes table :{0}", e.Message);
}
try
{
itemsDa.Fill(ds.Tables["primitems"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on primitems table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on primitems table :{0}", e.Message);
}
try
{
terrainDa.Fill(ds.Tables["terrain"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on terrain table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on terrain table :{0}", e.Message);
}
try
{
landDa.Fill(ds.Tables["land"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on land table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on land table :{0}", e.Message);
}
try
{
landAccessListDa.Fill(ds.Tables["landaccesslist"]);
}
- catch (Exception)
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on landaccesslist table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on landaccesslist table :{0}", e.Message);
}
try
{
regionSettingsDa.Fill(ds.Tables["regionsettings"]);
}
- catch (Exception)
+ catch (Exception e)
+ {
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on regionsettings table :{0}", e.Message);
+ }
+
+ try
+ {
+ regionWindlightDa.Fill(ds.Tables["regionwindlight"]);
+ }
+ catch (Exception e)
{
- m_log.Info("[SQLITE REGION DB]: Caught fill error on regionsettings table");
+ m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on regionwindlight table :{0}", e.Message);
}
// We have to create a data set mapping for every table, otherwise the IDataAdaptor.Update() will not populate rows with values!
@@ -240,14 +256,14 @@ namespace OpenSim.Data.SQLite
CreateDataSetMapping(landDa, "land");
CreateDataSetMapping(landAccessListDa, "landaccesslist");
CreateDataSetMapping(regionSettingsDa, "regionsettings");
+ CreateDataSetMapping(regionWindlightDa, "regionwindlight");
}
}
catch (Exception e)
{
- m_log.Error(e);
- Environment.Exit(23);
+ m_log.ErrorFormat("[SQLITE REGION DB]: ", e);
+ Environment.Exit(23);
}
-
return;
}
@@ -298,6 +314,11 @@ namespace OpenSim.Data.SQLite
regionSettingsDa.Dispose();
regionSettingsDa = null;
}
+ if (regionWindlightDa != null)
+ {
+ regionWindlightDa.Dispose();
+ regionWindlightDa = null;
+ }
}
public void StoreRegionSettings(RegionSettings rs)
@@ -321,19 +342,76 @@ namespace OpenSim.Data.SQLite
Commit();
}
}
+
+ ///
+ /// Load windlight settings from region storage
+ ///
+ /// RegionID
public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
{
- //This connector doesn't support the windlight module yet
- //Return default LL windlight settings
- return new RegionLightShareData();
+ RegionLightShareData wl = null;
+
+ lock (ds)
+ {
+ DataTable windlightTable = ds.Tables["regionwindlight"];
+ DataRow windlightRow = windlightTable.Rows.Find(regionUUID.ToString());
+ if (windlightRow == null)
+ {
+ wl = new RegionLightShareData();
+ wl.regionID = regionUUID;
+ StoreRegionWindlightSettings(wl);
+ return wl;
+ }
+ wl = buildRegionWindlight(windlightRow);
+ return wl;
+ }
}
+
+ ///
+ /// Remove windlight settings from region storage
+ ///
+ /// RegionID
public void RemoveRegionWindlightSettings(UUID regionID)
{
+ lock (ds)
+ {
+ DataTable windlightTable = ds.Tables["regionwindlight"];
+ DataRow windlightRow = windlightTable.Rows.Find(regionID.ToString());
+
+ if (windlightRow != null)
+ {
+ windlightRow.Delete();
+ }
+ }
+ Commit();
}
+
+ ///
+ /// Adds an windlight into region storage
+ ///
+ /// RegionLightShareData
public void StoreRegionWindlightSettings(RegionLightShareData wl)
{
- //This connector doesn't support the windlight module yet
+ lock (ds)
+ {
+ DataTable windlightTable = ds.Tables["regionwindlight"];
+ DataRow windlightRow = windlightTable.Rows.Find(wl.regionID.ToString());
+
+ if (windlightRow == null)
+ {
+ windlightRow = windlightTable.NewRow();
+ fillRegionWindlightRow(windlightRow, wl);
+ windlightTable.Rows.Add(windlightRow);
+ }
+ else
+ {
+ fillRegionWindlightRow(windlightRow, wl);
+ }
+
+ Commit();
+ }
}
+
public RegionSettings LoadRegionSettings(UUID regionUUID)
{
lock (ds)
@@ -387,7 +465,7 @@ namespace OpenSim.Data.SQLite
}
Commit();
- // m_log.Info("[Dump of prims]: " + ds.GetXml());
+// m_log.Info("[Dump of prims]: " + ds.GetXml());
}
///
@@ -397,7 +475,7 @@ namespace OpenSim.Data.SQLite
/// the region UUID
public void RemoveObject(UUID obj, UUID regionUUID)
{
- // m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID);
+// m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID);
DataTable prims = ds.Tables["prims"];
DataTable shapes = ds.Tables["primshapes"];
@@ -409,7 +487,7 @@ namespace OpenSim.Data.SQLite
foreach (DataRow row in primRows)
{
// Remove shape rows
- UUID uuid = new UUID((string) row["UUID"]);
+ UUID uuid = new UUID((string)row["UUID"]);
DataRow shapeRow = shapes.Rows.Find(uuid.ToString());
if (shapeRow != null)
{
@@ -464,7 +542,7 @@ namespace OpenSim.Data.SQLite
{
DataRow[] primsForRegion = prims.Select(byRegion);
// m_log.Info("[SQLITE REGION DB]: Loaded " + primsForRegion.Length + " prims for region: " + regionUUID);
-
+
// First, create all groups
foreach (DataRow primRow in primsForRegion)
{
@@ -472,9 +550,9 @@ namespace OpenSim.Data.SQLite
{
SceneObjectPart prim = null;
- string uuid = (string) primRow["UUID"];
- string objID = (string) primRow["SceneGroupID"];
-
+ string uuid = (string)primRow["UUID"];
+ string objID = (string)primRow["SceneGroupID"];
+
if (uuid == objID) //is new SceneObjectGroup ?
{
prim = buildPrim(primRow);
@@ -489,7 +567,7 @@ namespace OpenSim.Data.SQLite
"[SQLITE REGION DB]: No shape found for prim in storage, so setting default box shape");
prim.Shape = PrimitiveBaseShape.Default;
}
-
+
SceneObjectGroup group = new SceneObjectGroup(prim);
createdObjects.Add(group.UUID, group);
retvals.Add(group);
@@ -506,7 +584,7 @@ namespace OpenSim.Data.SQLite
}
}
}
-
+
// Now fill the groups with part data
foreach (DataRow primRow in primsForRegion)
{
@@ -514,8 +592,8 @@ namespace OpenSim.Data.SQLite
{
SceneObjectPart prim = null;
- string uuid = (string) primRow["UUID"];
- string objID = (string) primRow["SceneGroupID"];
+ string uuid = (string)primRow["UUID"];
+ string objID = (string)primRow["SceneGroupID"];
if (uuid != objID) //is new SceneObjectGroup ?
{
prim = buildPrim(primRow);
@@ -562,8 +640,7 @@ namespace OpenSim.Data.SQLite
DataRow[] dbItemRows = dbItems.Select(sql);
IList inventory = new List();
-// m_log.DebugFormat(
-// "[SQLITE REGION DB]: Found {0} items for {1} {2}", dbItemRows.Length, prim.Name, prim.UUID);
+// m_log.DebugFormat("[SQLITE REGION DB]: Found {0} items for {1} {2}", dbItemRows.Length, prim.Name, prim.UUID);
foreach (DataRow row in dbItemRows)
{
@@ -742,7 +819,7 @@ namespace OpenSim.Data.SQLite
// cmd.Parameters.Add(new SqliteParameter(":LandUUID", parcel.LandData.GlobalID.ToString()));
// cmd.ExecuteNonQuery();
-// }
+ // }
// This is the slower.. but more appropriate thing to do
@@ -805,7 +882,7 @@ namespace OpenSim.Data.SQLite
///
public void Commit()
{
- //m_log.Debug("[SQLITE]: Starting commit");
+// m_log.Debug("[SQLITE]: Starting commit");
lock (ds)
{
primDa.Update(ds, "prims");
@@ -819,6 +896,7 @@ namespace OpenSim.Data.SQLite
try
{
regionSettingsDa.Update(ds, "regionsettings");
+ regionWindlightDa.Update(ds, "regionwindlight");
}
catch (SqliteException SqlEx)
{
@@ -875,9 +953,9 @@ namespace OpenSim.Data.SQLite
{
DataTable terrain = new DataTable("terrain");
- createCol(terrain, "RegionUUID", typeof (String));
- createCol(terrain, "Revision", typeof (Int32));
- createCol(terrain, "Heightfield", typeof (Byte[]));
+ createCol(terrain, "RegionUUID", typeof(String));
+ createCol(terrain, "Revision", typeof(Int32));
+ createCol(terrain, "Heightfield", typeof(Byte[]));
return terrain;
}
@@ -890,62 +968,62 @@ namespace OpenSim.Data.SQLite
{
DataTable prims = new DataTable("prims");
- createCol(prims, "UUID", typeof (String));
- createCol(prims, "RegionUUID", typeof (String));
- createCol(prims, "CreationDate", typeof (Int32));
- createCol(prims, "Name", typeof (String));
- createCol(prims, "SceneGroupID", typeof (String));
+ createCol(prims, "UUID", typeof(String));
+ createCol(prims, "RegionUUID", typeof(String));
+ createCol(prims, "CreationDate", typeof(Int32));
+ createCol(prims, "Name", typeof(String));
+ createCol(prims, "SceneGroupID", typeof(String));
// various text fields
- createCol(prims, "Text", typeof (String));
- createCol(prims, "ColorR", typeof (Int32));
- createCol(prims, "ColorG", typeof (Int32));
- createCol(prims, "ColorB", typeof (Int32));
- createCol(prims, "ColorA", typeof (Int32));
- createCol(prims, "Description", typeof (String));
- createCol(prims, "SitName", typeof (String));
- createCol(prims, "TouchName", typeof (String));
+ createCol(prims, "Text", typeof(String));
+ createCol(prims, "ColorR", typeof(Int32));
+ createCol(prims, "ColorG", typeof(Int32));
+ createCol(prims, "ColorB", typeof(Int32));
+ createCol(prims, "ColorA", typeof(Int32));
+ createCol(prims, "Description", typeof(String));
+ createCol(prims, "SitName", typeof(String));
+ createCol(prims, "TouchName", typeof(String));
// permissions
- createCol(prims, "ObjectFlags", typeof (Int32));
- createCol(prims, "CreatorID", typeof (String));
- createCol(prims, "OwnerID", typeof (String));
- createCol(prims, "GroupID", typeof (String));
- createCol(prims, "LastOwnerID", typeof (String));
- createCol(prims, "OwnerMask", typeof (Int32));
- createCol(prims, "NextOwnerMask", typeof (Int32));
- createCol(prims, "GroupMask", typeof (Int32));
- createCol(prims, "EveryoneMask", typeof (Int32));
- createCol(prims, "BaseMask", typeof (Int32));
+ createCol(prims, "ObjectFlags", typeof(Int32));
+ createCol(prims, "CreatorID", typeof(String));
+ createCol(prims, "OwnerID", typeof(String));
+ createCol(prims, "GroupID", typeof(String));
+ createCol(prims, "LastOwnerID", typeof(String));
+ createCol(prims, "OwnerMask", typeof(Int32));
+ createCol(prims, "NextOwnerMask", typeof(Int32));
+ createCol(prims, "GroupMask", typeof(Int32));
+ createCol(prims, "EveryoneMask", typeof(Int32));
+ createCol(prims, "BaseMask", typeof(Int32));
// vectors
- createCol(prims, "PositionX", typeof (Double));
- createCol(prims, "PositionY", typeof (Double));
- createCol(prims, "PositionZ", typeof (Double));
- createCol(prims, "GroupPositionX", typeof (Double));
- createCol(prims, "GroupPositionY", typeof (Double));
- createCol(prims, "GroupPositionZ", typeof (Double));
- createCol(prims, "VelocityX", typeof (Double));
- createCol(prims, "VelocityY", typeof (Double));
- createCol(prims, "VelocityZ", typeof (Double));
- createCol(prims, "AngularVelocityX", typeof (Double));
- createCol(prims, "AngularVelocityY", typeof (Double));
- createCol(prims, "AngularVelocityZ", typeof (Double));
- createCol(prims, "AccelerationX", typeof (Double));
- createCol(prims, "AccelerationY", typeof (Double));
- createCol(prims, "AccelerationZ", typeof (Double));
+ createCol(prims, "PositionX", typeof(Double));
+ createCol(prims, "PositionY", typeof(Double));
+ createCol(prims, "PositionZ", typeof(Double));
+ createCol(prims, "GroupPositionX", typeof(Double));
+ createCol(prims, "GroupPositionY", typeof(Double));
+ createCol(prims, "GroupPositionZ", typeof(Double));
+ createCol(prims, "VelocityX", typeof(Double));
+ createCol(prims, "VelocityY", typeof(Double));
+ createCol(prims, "VelocityZ", typeof(Double));
+ createCol(prims, "AngularVelocityX", typeof(Double));
+ createCol(prims, "AngularVelocityY", typeof(Double));
+ createCol(prims, "AngularVelocityZ", typeof(Double));
+ createCol(prims, "AccelerationX", typeof(Double));
+ createCol(prims, "AccelerationY", typeof(Double));
+ createCol(prims, "AccelerationZ", typeof(Double));
// quaternions
- createCol(prims, "RotationX", typeof (Double));
- createCol(prims, "RotationY", typeof (Double));
- createCol(prims, "RotationZ", typeof (Double));
- createCol(prims, "RotationW", typeof (Double));
+ createCol(prims, "RotationX", typeof(Double));
+ createCol(prims, "RotationY", typeof(Double));
+ createCol(prims, "RotationZ", typeof(Double));
+ createCol(prims, "RotationW", typeof(Double));
// sit target
- createCol(prims, "SitTargetOffsetX", typeof (Double));
- createCol(prims, "SitTargetOffsetY", typeof (Double));
- createCol(prims, "SitTargetOffsetZ", typeof (Double));
+ createCol(prims, "SitTargetOffsetX", typeof(Double));
+ createCol(prims, "SitTargetOffsetY", typeof(Double));
+ createCol(prims, "SitTargetOffsetZ", typeof(Double));
- createCol(prims, "SitTargetOrientW", typeof (Double));
- createCol(prims, "SitTargetOrientX", typeof (Double));
- createCol(prims, "SitTargetOrientY", typeof (Double));
- createCol(prims, "SitTargetOrientZ", typeof (Double));
+ createCol(prims, "SitTargetOrientW", typeof(Double));
+ createCol(prims, "SitTargetOrientX", typeof(Double));
+ createCol(prims, "SitTargetOrientY", typeof(Double));
+ createCol(prims, "SitTargetOrientZ", typeof(Double));
createCol(prims, "PayPrice", typeof(Int32));
createCol(prims, "PayButton1", typeof(Int32));
@@ -981,7 +1059,7 @@ namespace OpenSim.Data.SQLite
createCol(prims, "SaleType", typeof(Int16));
// click action
- createCol(prims, "ClickAction", typeof (Byte));
+ createCol(prims, "ClickAction", typeof(Byte));
createCol(prims, "Material", typeof(Byte));
@@ -993,7 +1071,7 @@ namespace OpenSim.Data.SQLite
createCol(prims, "MediaURL", typeof(String));
// Add in contraints
- prims.PrimaryKey = new DataColumn[] {prims.Columns["UUID"]};
+ prims.PrimaryKey = new DataColumn[] { prims.Columns["UUID"] };
return prims;
}
@@ -1005,42 +1083,42 @@ namespace OpenSim.Data.SQLite
private static DataTable createShapeTable()
{
DataTable shapes = new DataTable("primshapes");
- createCol(shapes, "UUID", typeof (String));
+ createCol(shapes, "UUID", typeof(String));
// shape is an enum
- createCol(shapes, "Shape", typeof (Int32));
+ createCol(shapes, "Shape", typeof(Int32));
// vectors
- createCol(shapes, "ScaleX", typeof (Double));
- createCol(shapes, "ScaleY", typeof (Double));
- createCol(shapes, "ScaleZ", typeof (Double));
+ createCol(shapes, "ScaleX", typeof(Double));
+ createCol(shapes, "ScaleY", typeof(Double));
+ createCol(shapes, "ScaleZ", typeof(Double));
// paths
- createCol(shapes, "PCode", typeof (Int32));
- createCol(shapes, "PathBegin", typeof (Int32));
- createCol(shapes, "PathEnd", typeof (Int32));
- createCol(shapes, "PathScaleX", typeof (Int32));
- createCol(shapes, "PathScaleY", typeof (Int32));
- createCol(shapes, "PathShearX", typeof (Int32));
- createCol(shapes, "PathShearY", typeof (Int32));
- createCol(shapes, "PathSkew", typeof (Int32));
- createCol(shapes, "PathCurve", typeof (Int32));
- createCol(shapes, "PathRadiusOffset", typeof (Int32));
- createCol(shapes, "PathRevolutions", typeof (Int32));
- createCol(shapes, "PathTaperX", typeof (Int32));
- createCol(shapes, "PathTaperY", typeof (Int32));
- createCol(shapes, "PathTwist", typeof (Int32));
- createCol(shapes, "PathTwistBegin", typeof (Int32));
+ createCol(shapes, "PCode", typeof(Int32));
+ createCol(shapes, "PathBegin", typeof(Int32));
+ createCol(shapes, "PathEnd", typeof(Int32));
+ createCol(shapes, "PathScaleX", typeof(Int32));
+ createCol(shapes, "PathScaleY", typeof(Int32));
+ createCol(shapes, "PathShearX", typeof(Int32));
+ createCol(shapes, "PathShearY", typeof(Int32));
+ createCol(shapes, "PathSkew", typeof(Int32));
+ createCol(shapes, "PathCurve", typeof(Int32));
+ createCol(shapes, "PathRadiusOffset", typeof(Int32));
+ createCol(shapes, "PathRevolutions", typeof(Int32));
+ createCol(shapes, "PathTaperX", typeof(Int32));
+ createCol(shapes, "PathTaperY", typeof(Int32));
+ createCol(shapes, "PathTwist", typeof(Int32));
+ createCol(shapes, "PathTwistBegin", typeof(Int32));
// profile
- createCol(shapes, "ProfileBegin", typeof (Int32));
- createCol(shapes, "ProfileEnd", typeof (Int32));
- createCol(shapes, "ProfileCurve", typeof (Int32));
- createCol(shapes, "ProfileHollow", typeof (Int32));
+ createCol(shapes, "ProfileBegin", typeof(Int32));
+ createCol(shapes, "ProfileEnd", typeof(Int32));
+ createCol(shapes, "ProfileCurve", typeof(Int32));
+ createCol(shapes, "ProfileHollow", typeof(Int32));
createCol(shapes, "State", typeof(Int32));
// text TODO: this isn't right, but I'm not sure the right
// way to specify this as a blob atm
- createCol(shapes, "Texture", typeof (Byte[]));
- createCol(shapes, "ExtraParams", typeof (Byte[]));
+ createCol(shapes, "Texture", typeof(Byte[]));
+ createCol(shapes, "ExtraParams", typeof(Byte[]));
createCol(shapes, "Media", typeof(String));
- shapes.PrimaryKey = new DataColumn[] {shapes.Columns["UUID"]};
+ shapes.PrimaryKey = new DataColumn[] { shapes.Columns["UUID"] };
return shapes;
}
@@ -1053,29 +1131,29 @@ namespace OpenSim.Data.SQLite
{
DataTable items = new DataTable("primitems");
- createCol(items, "itemID", typeof (String));
- createCol(items, "primID", typeof (String));
- createCol(items, "assetID", typeof (String));
- createCol(items, "parentFolderID", typeof (String));
+ createCol(items, "itemID", typeof(String));
+ createCol(items, "primID", typeof(String));
+ createCol(items, "assetID", typeof(String));
+ createCol(items, "parentFolderID", typeof(String));
- createCol(items, "invType", typeof (Int32));
- createCol(items, "assetType", typeof (Int32));
+ createCol(items, "invType", typeof(Int32));
+ createCol(items, "assetType", typeof(Int32));
- createCol(items, "name", typeof (String));
- createCol(items, "description", typeof (String));
+ createCol(items, "name", typeof(String));
+ createCol(items, "description", typeof(String));
- createCol(items, "creationDate", typeof (Int64));
- createCol(items, "creatorID", typeof (String));
- createCol(items, "ownerID", typeof (String));
- createCol(items, "lastOwnerID", typeof (String));
- createCol(items, "groupID", typeof (String));
+ createCol(items, "creationDate", typeof(Int64));
+ createCol(items, "creatorID", typeof(String));
+ createCol(items, "ownerID", typeof(String));
+ createCol(items, "lastOwnerID", typeof(String));
+ createCol(items, "groupID", typeof(String));
- createCol(items, "nextPermissions", typeof (UInt32));
- createCol(items, "currentPermissions", typeof (UInt32));
- createCol(items, "basePermissions", typeof (UInt32));
- createCol(items, "everyonePermissions", typeof (UInt32));
- createCol(items, "groupPermissions", typeof (UInt32));
- createCol(items, "flags", typeof (UInt32));
+ createCol(items, "nextPermissions", typeof(UInt32));
+ createCol(items, "currentPermissions", typeof(UInt32));
+ createCol(items, "basePermissions", typeof(UInt32));
+ createCol(items, "everyonePermissions", typeof(UInt32));
+ createCol(items, "groupPermissions", typeof(UInt32));
+ createCol(items, "flags", typeof(UInt32));
items.PrimaryKey = new DataColumn[] { items.Columns["itemID"] };
@@ -1089,44 +1167,44 @@ namespace OpenSim.Data.SQLite
private static DataTable createLandTable()
{
DataTable land = new DataTable("land");
- createCol(land, "UUID", typeof (String));
- createCol(land, "RegionUUID", typeof (String));
- createCol(land, "LocalLandID", typeof (UInt32));
+ createCol(land, "UUID", typeof(String));
+ createCol(land, "RegionUUID", typeof(String));
+ createCol(land, "LocalLandID", typeof(UInt32));
// Bitmap is a byte[512]
- createCol(land, "Bitmap", typeof (Byte[]));
-
- createCol(land, "Name", typeof (String));
- createCol(land, "Desc", typeof (String));
- createCol(land, "OwnerUUID", typeof (String));
- createCol(land, "IsGroupOwned", typeof (Boolean));
- createCol(land, "Area", typeof (Int32));
- createCol(land, "AuctionID", typeof (Int32)); //Unemplemented
- createCol(land, "Category", typeof (Int32)); //Enum OpenMetaverse.Parcel.ParcelCategory
- createCol(land, "ClaimDate", typeof (Int32));
- createCol(land, "ClaimPrice", typeof (Int32));
- createCol(land, "GroupUUID", typeof (string));
- createCol(land, "SalePrice", typeof (Int32));
- createCol(land, "LandStatus", typeof (Int32)); //Enum. OpenMetaverse.Parcel.ParcelStatus
- createCol(land, "LandFlags", typeof (UInt32));
- createCol(land, "LandingType", typeof (Byte));
- createCol(land, "MediaAutoScale", typeof (Byte));
- createCol(land, "MediaTextureUUID", typeof (String));
- createCol(land, "MediaURL", typeof (String));
- createCol(land, "MusicURL", typeof (String));
- createCol(land, "PassHours", typeof (Double));
- createCol(land, "PassPrice", typeof (UInt32));
- createCol(land, "SnapshotUUID", typeof (String));
- createCol(land, "UserLocationX", typeof (Double));
- createCol(land, "UserLocationY", typeof (Double));
- createCol(land, "UserLocationZ", typeof (Double));
- createCol(land, "UserLookAtX", typeof (Double));
- createCol(land, "UserLookAtY", typeof (Double));
- createCol(land, "UserLookAtZ", typeof (Double));
+ createCol(land, "Bitmap", typeof(Byte[]));
+
+ createCol(land, "Name", typeof(String));
+ createCol(land, "Desc", typeof(String));
+ createCol(land, "OwnerUUID", typeof(String));
+ createCol(land, "IsGroupOwned", typeof(Boolean));
+ createCol(land, "Area", typeof(Int32));
+ createCol(land, "AuctionID", typeof(Int32)); //Unemplemented
+ createCol(land, "Category", typeof(Int32)); //Enum OpenMetaverse.Parcel.ParcelCategory
+ createCol(land, "ClaimDate", typeof(Int32));
+ createCol(land, "ClaimPrice", typeof(Int32));
+ createCol(land, "GroupUUID", typeof(string));
+ createCol(land, "SalePrice", typeof(Int32));
+ createCol(land, "LandStatus", typeof(Int32)); //Enum. OpenMetaverse.Parcel.ParcelStatus
+ createCol(land, "LandFlags", typeof(UInt32));
+ createCol(land, "LandingType", typeof(Byte));
+ createCol(land, "MediaAutoScale", typeof(Byte));
+ createCol(land, "MediaTextureUUID", typeof(String));
+ createCol(land, "MediaURL", typeof(String));
+ createCol(land, "MusicURL", typeof(String));
+ createCol(land, "PassHours", typeof(Double));
+ createCol(land, "PassPrice", typeof(UInt32));
+ createCol(land, "SnapshotUUID", typeof(String));
+ createCol(land, "UserLocationX", typeof(Double));
+ createCol(land, "UserLocationY", typeof(Double));
+ createCol(land, "UserLocationZ", typeof(Double));
+ createCol(land, "UserLookAtX", typeof(Double));
+ createCol(land, "UserLookAtY", typeof(Double));
+ createCol(land, "UserLookAtZ", typeof(Double));
createCol(land, "AuthbuyerID", typeof(String));
createCol(land, "OtherCleanTime", typeof(Int32));
- land.PrimaryKey = new DataColumn[] {land.Columns["UUID"]};
+ land.PrimaryKey = new DataColumn[] { land.Columns["UUID"] };
return land;
}
@@ -1138,9 +1216,9 @@ namespace OpenSim.Data.SQLite
private static DataTable createLandAccessListTable()
{
DataTable landaccess = new DataTable("landaccesslist");
- createCol(landaccess, "LandUUID", typeof (String));
- createCol(landaccess, "AccessUUID", typeof (String));
- createCol(landaccess, "Flags", typeof (UInt32));
+ createCol(landaccess, "LandUUID", typeof(String));
+ createCol(landaccess, "AccessUUID", typeof(String));
+ createCol(landaccess, "Flags", typeof(UInt32));
return landaccess;
}
@@ -1149,41 +1227,41 @@ namespace OpenSim.Data.SQLite
{
DataTable regionsettings = new DataTable("regionsettings");
createCol(regionsettings, "regionUUID", typeof(String));
- createCol(regionsettings, "block_terraform", typeof (Int32));
- createCol(regionsettings, "block_fly", typeof (Int32));
- createCol(regionsettings, "allow_damage", typeof (Int32));
- createCol(regionsettings, "restrict_pushing", typeof (Int32));
- createCol(regionsettings, "allow_land_resell", typeof (Int32));
- createCol(regionsettings, "allow_land_join_divide", typeof (Int32));
- createCol(regionsettings, "block_show_in_search", typeof (Int32));
- createCol(regionsettings, "agent_limit", typeof (Int32));
- createCol(regionsettings, "object_bonus", typeof (Double));
- createCol(regionsettings, "maturity", typeof (Int32));
- createCol(regionsettings, "disable_scripts", typeof (Int32));
- createCol(regionsettings, "disable_collisions", typeof (Int32));
- createCol(regionsettings, "disable_physics", typeof (Int32));
+ createCol(regionsettings, "block_terraform", typeof(Int32));
+ createCol(regionsettings, "block_fly", typeof(Int32));
+ createCol(regionsettings, "allow_damage", typeof(Int32));
+ createCol(regionsettings, "restrict_pushing", typeof(Int32));
+ createCol(regionsettings, "allow_land_resell", typeof(Int32));
+ createCol(regionsettings, "allow_land_join_divide", typeof(Int32));
+ createCol(regionsettings, "block_show_in_search", typeof(Int32));
+ createCol(regionsettings, "agent_limit", typeof(Int32));
+ createCol(regionsettings, "object_bonus", typeof(Double));
+ createCol(regionsettings, "maturity", typeof(Int32));
+ createCol(regionsettings, "disable_scripts", typeof(Int32));
+ createCol(regionsettings, "disable_collisions", typeof(Int32));
+ createCol(regionsettings, "disable_physics", typeof(Int32));
createCol(regionsettings, "terrain_texture_1", typeof(String));
createCol(regionsettings, "terrain_texture_2", typeof(String));
createCol(regionsettings, "terrain_texture_3", typeof(String));
createCol(regionsettings, "terrain_texture_4", typeof(String));
- createCol(regionsettings, "elevation_1_nw", typeof (Double));
- createCol(regionsettings, "elevation_2_nw", typeof (Double));
- createCol(regionsettings, "elevation_1_ne", typeof (Double));
- createCol(regionsettings, "elevation_2_ne", typeof (Double));
- createCol(regionsettings, "elevation_1_se", typeof (Double));
- createCol(regionsettings, "elevation_2_se", typeof (Double));
- createCol(regionsettings, "elevation_1_sw", typeof (Double));
- createCol(regionsettings, "elevation_2_sw", typeof (Double));
- createCol(regionsettings, "water_height", typeof (Double));
- createCol(regionsettings, "terrain_raise_limit", typeof (Double));
- createCol(regionsettings, "terrain_lower_limit", typeof (Double));
- createCol(regionsettings, "use_estate_sun", typeof (Int32));
- createCol(regionsettings, "sandbox", typeof (Int32));
- createCol(regionsettings, "sunvectorx",typeof (Double));
- createCol(regionsettings, "sunvectory",typeof (Double));
- createCol(regionsettings, "sunvectorz",typeof (Double));
- createCol(regionsettings, "fixed_sun", typeof (Int32));
- createCol(regionsettings, "sun_position", typeof (Double));
+ createCol(regionsettings, "elevation_1_nw", typeof(Double));
+ createCol(regionsettings, "elevation_2_nw", typeof(Double));
+ createCol(regionsettings, "elevation_1_ne", typeof(Double));
+ createCol(regionsettings, "elevation_2_ne", typeof(Double));
+ createCol(regionsettings, "elevation_1_se", typeof(Double));
+ createCol(regionsettings, "elevation_2_se", typeof(Double));
+ createCol(regionsettings, "elevation_1_sw", typeof(Double));
+ createCol(regionsettings, "elevation_2_sw", typeof(Double));
+ createCol(regionsettings, "water_height", typeof(Double));
+ createCol(regionsettings, "terrain_raise_limit", typeof(Double));
+ createCol(regionsettings, "terrain_lower_limit", typeof(Double));
+ createCol(regionsettings, "use_estate_sun", typeof(Int32));
+ createCol(regionsettings, "sandbox", typeof(Int32));
+ createCol(regionsettings, "sunvectorx", typeof(Double));
+ createCol(regionsettings, "sunvectory", typeof(Double));
+ createCol(regionsettings, "sunvectorz", typeof(Double));
+ createCol(regionsettings, "fixed_sun", typeof(Int32));
+ createCol(regionsettings, "sun_position", typeof(Double));
createCol(regionsettings, "covenant", typeof(String));
createCol(regionsettings, "covenant_datetime", typeof(Int32));
createCol(regionsettings, "map_tile_ID", typeof(String));
@@ -1191,6 +1269,82 @@ namespace OpenSim.Data.SQLite
return regionsettings;
}
+ ///
+ /// create "regionwindlight" table
+ ///
+ /// RegionWindlight DataTable
+ private static DataTable createRegionWindlightTable()
+ {
+ DataTable regionwindlight = new DataTable("regionwindlight");
+ createCol(regionwindlight, "region_id", typeof(String));
+ createCol(regionwindlight, "water_color_r", typeof(Double));
+ createCol(regionwindlight, "water_color_g", typeof(Double));
+ createCol(regionwindlight, "water_color_b", typeof(Double));
+ createCol(regionwindlight, "water_color_i", typeof(Double));
+ createCol(regionwindlight, "water_fog_density_exponent", typeof(Double));
+ createCol(regionwindlight, "underwater_fog_modifier", typeof(Double));
+ createCol(regionwindlight, "reflection_wavelet_scale_1", typeof(Double));
+ createCol(regionwindlight, "reflection_wavelet_scale_2", typeof(Double));
+ createCol(regionwindlight, "reflection_wavelet_scale_3", typeof(Double));
+ createCol(regionwindlight, "fresnel_scale", typeof(Double));
+ createCol(regionwindlight, "fresnel_offset", typeof(Double));
+ createCol(regionwindlight, "refract_scale_above", typeof(Double));
+ createCol(regionwindlight, "refract_scale_below", typeof(Double));
+ createCol(regionwindlight, "blur_multiplier", typeof(Double));
+ createCol(regionwindlight, "big_wave_direction_x", typeof(Double));
+ createCol(regionwindlight, "big_wave_direction_y", typeof(Double));
+ createCol(regionwindlight, "little_wave_direction_x", typeof(Double));
+ createCol(regionwindlight, "little_wave_direction_y", typeof(Double));
+ createCol(regionwindlight, "normal_map_texture", typeof(String));
+ createCol(regionwindlight, "horizon_r", typeof(Double));
+ createCol(regionwindlight, "horizon_g", typeof(Double));
+ createCol(regionwindlight, "horizon_b", typeof(Double));
+ createCol(regionwindlight, "horizon_i", typeof(Double));
+ createCol(regionwindlight, "haze_horizon", typeof(Double));
+ createCol(regionwindlight, "blue_density_r", typeof(Double));
+ createCol(regionwindlight, "blue_density_g", typeof(Double));
+ createCol(regionwindlight, "blue_density_b", typeof(Double));
+ createCol(regionwindlight, "blue_density_i", typeof(Double));
+ createCol(regionwindlight, "haze_density", typeof(Double));
+ createCol(regionwindlight, "density_multiplier", typeof(Double));
+ createCol(regionwindlight, "distance_multiplier", typeof(Double));
+ createCol(regionwindlight, "max_altitude", typeof(Int32));
+ createCol(regionwindlight, "sun_moon_color_r", typeof(Double));
+ createCol(regionwindlight, "sun_moon_color_g", typeof(Double));
+ createCol(regionwindlight, "sun_moon_color_b", typeof(Double));
+ createCol(regionwindlight, "sun_moon_color_i", typeof(Double));
+ createCol(regionwindlight, "sun_moon_position", typeof(Double));
+ createCol(regionwindlight, "ambient_r", typeof(Double));
+ createCol(regionwindlight, "ambient_g", typeof(Double));
+ createCol(regionwindlight, "ambient_b", typeof(Double));
+ createCol(regionwindlight, "ambient_i", typeof(Double));
+ createCol(regionwindlight, "east_angle", typeof(Double));
+ createCol(regionwindlight, "sun_glow_focus", typeof(Double));
+ createCol(regionwindlight, "sun_glow_size", typeof(Double));
+ createCol(regionwindlight, "scene_gamma", typeof(Double));
+ createCol(regionwindlight, "star_brightness", typeof(Double));
+ createCol(regionwindlight, "cloud_color_r", typeof(Double));
+ createCol(regionwindlight, "cloud_color_g", typeof(Double));
+ createCol(regionwindlight, "cloud_color_b", typeof(Double));
+ createCol(regionwindlight, "cloud_color_i", typeof(Double));
+ createCol(regionwindlight, "cloud_x", typeof(Double));
+ createCol(regionwindlight, "cloud_y", typeof(Double));
+ createCol(regionwindlight, "cloud_density", typeof(Double));
+ createCol(regionwindlight, "cloud_coverage", typeof(Double));
+ createCol(regionwindlight, "cloud_scale", typeof(Double));
+ createCol(regionwindlight, "cloud_detail_x", typeof(Double));
+ createCol(regionwindlight, "cloud_detail_y", typeof(Double));
+ createCol(regionwindlight, "cloud_detail_density", typeof(Double));
+ createCol(regionwindlight, "cloud_scroll_x", typeof(Double));
+ createCol(regionwindlight, "cloud_scroll_x_lock", typeof(Int32));
+ createCol(regionwindlight, "cloud_scroll_y", typeof(Double));
+ createCol(regionwindlight, "cloud_scroll_y_lock", typeof(Int32));
+ createCol(regionwindlight, "draw_classic_clouds", typeof(Int32));
+
+ regionwindlight.PrimaryKey = new DataColumn[] { regionwindlight.Columns["region_id"] };
+ return regionwindlight;
+ }
+
/***********************************************************************
*
* Convert between ADO.NET <=> OpenSim Objects
@@ -1229,26 +1383,26 @@ namespace OpenSim.Data.SQLite
// back out. Not enough time to figure it out yet.
SceneObjectPart prim = new SceneObjectPart();
- prim.UUID = new UUID((String) row["UUID"]);
+ prim.UUID = new UUID((String)row["UUID"]);
// explicit conversion of integers is required, which sort
// of sucks. No idea if there is a shortcut here or not.
prim.CreationDate = Convert.ToInt32(row["CreationDate"]);
prim.Name = row["Name"] == DBNull.Value ? string.Empty : (string)row["Name"];
// various text fields
- prim.Text = (String) row["Text"];
+ prim.Text = (String)row["Text"];
prim.Color = Color.FromArgb(Convert.ToInt32(row["ColorA"]),
Convert.ToInt32(row["ColorR"]),
Convert.ToInt32(row["ColorG"]),
Convert.ToInt32(row["ColorB"]));
- prim.Description = (String) row["Description"];
- prim.SitName = (String) row["SitName"];
- prim.TouchName = (String) row["TouchName"];
+ prim.Description = (String)row["Description"];
+ prim.SitName = (String)row["SitName"];
+ prim.TouchName = (String)row["TouchName"];
// permissions
prim.ObjectFlags = Convert.ToUInt32(row["ObjectFlags"]);
- prim.CreatorIdentification = (String) row["CreatorID"];
- prim.OwnerID = new UUID((String) row["OwnerID"]);
- prim.GroupID = new UUID((String) row["GroupID"]);
- prim.LastOwnerID = new UUID((String) row["LastOwnerID"]);
+ prim.CreatorIdentification = (String)row["CreatorID"];
+ prim.OwnerID = new UUID((String)row["OwnerID"]);
+ prim.GroupID = new UUID((String)row["GroupID"]);
+ prim.LastOwnerID = new UUID((String)row["LastOwnerID"]);
prim.OwnerMask = Convert.ToUInt32(row["OwnerMask"]);
prim.NextOwnerMask = Convert.ToUInt32(row["NextOwnerMask"]);
prim.GroupMask = Convert.ToUInt32(row["GroupMask"]);
@@ -1360,7 +1514,7 @@ namespace OpenSim.Data.SQLite
if (!(row["MediaURL"] is System.DBNull))
{
- //m_log.DebugFormat("[SQLITE]: MediaUrl type [{0}]", row["MediaURL"].GetType());
+// m_log.DebugFormat("[SQLITE]: MediaUrl type [{0}]", row["MediaURL"].GetType());
prim.MediaUrl = (string)row["MediaURL"];
}
@@ -1376,28 +1530,28 @@ namespace OpenSim.Data.SQLite
{
TaskInventoryItem taskItem = new TaskInventoryItem();
- taskItem.ItemID = new UUID((String)row["itemID"]);
- taskItem.ParentPartID = new UUID((String)row["primID"]);
- taskItem.AssetID = new UUID((String)row["assetID"]);
- taskItem.ParentID = new UUID((String)row["parentFolderID"]);
+ taskItem.ItemID = new UUID((String)row["itemID"]);
+ taskItem.ParentPartID = new UUID((String)row["primID"]);
+ taskItem.AssetID = new UUID((String)row["assetID"]);
+ taskItem.ParentID = new UUID((String)row["parentFolderID"]);
- taskItem.InvType = Convert.ToInt32(row["invType"]);
- taskItem.Type = Convert.ToInt32(row["assetType"]);
+ taskItem.InvType = Convert.ToInt32(row["invType"]);
+ taskItem.Type = Convert.ToInt32(row["assetType"]);
- taskItem.Name = (String)row["name"];
- taskItem.Description = (String)row["description"];
- taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]);
+ taskItem.Name = (String)row["name"];
+ taskItem.Description = (String)row["description"];
+ taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]);
taskItem.CreatorIdentification = (String)row["creatorID"];
- taskItem.OwnerID = new UUID((String)row["ownerID"]);
- taskItem.LastOwnerID = new UUID((String)row["lastOwnerID"]);
- taskItem.GroupID = new UUID((String)row["groupID"]);
+ taskItem.OwnerID = new UUID((String)row["ownerID"]);
+ taskItem.LastOwnerID = new UUID((String)row["lastOwnerID"]);
+ taskItem.GroupID = new UUID((String)row["groupID"]);
taskItem.NextPermissions = Convert.ToUInt32(row["nextPermissions"]);
- taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]);
- taskItem.BasePermissions = Convert.ToUInt32(row["basePermissions"]);
- taskItem.EveryonePermissions = Convert.ToUInt32(row["everyonePermissions"]);
- taskItem.GroupPermissions = Convert.ToUInt32(row["groupPermissions"]);
- taskItem.Flags = Convert.ToUInt32(row["flags"]);
+ taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]);
+ taskItem.BasePermissions = Convert.ToUInt32(row["basePermissions"]);
+ taskItem.EveryonePermissions = Convert.ToUInt32(row["everyonePermissions"]);
+ taskItem.GroupPermissions = Convert.ToUInt32(row["groupPermissions"]);
+ taskItem.Flags = Convert.ToUInt32(row["flags"]);
return taskItem;
}
@@ -1411,35 +1565,35 @@ namespace OpenSim.Data.SQLite
{
LandData newData = new LandData();
- newData.GlobalID = new UUID((String) row["UUID"]);
+ newData.GlobalID = new UUID((String)row["UUID"]);
newData.LocalID = Convert.ToInt32(row["LocalLandID"]);
// Bitmap is a byte[512]
- newData.Bitmap = (Byte[]) row["Bitmap"];
+ newData.Bitmap = (Byte[])row["Bitmap"];
- newData.Name = (String) row["Name"];
- newData.Description = (String) row["Desc"];
- newData.OwnerID = (UUID)(String) row["OwnerUUID"];
- newData.IsGroupOwned = (Boolean) row["IsGroupOwned"];
+ newData.Name = (String)row["Name"];
+ newData.Description = (String)row["Desc"];
+ newData.OwnerID = (UUID)(String)row["OwnerUUID"];
+ newData.IsGroupOwned = (Boolean)row["IsGroupOwned"];
newData.Area = Convert.ToInt32(row["Area"]);
newData.AuctionID = Convert.ToUInt32(row["AuctionID"]); //Unemplemented
- newData.Category = (ParcelCategory) Convert.ToInt32(row["Category"]);
- //Enum OpenMetaverse.Parcel.ParcelCategory
+ newData.Category = (ParcelCategory)Convert.ToInt32(row["Category"]);
+ //Enum OpenMetaverse.Parcel.ParcelCategory
newData.ClaimDate = Convert.ToInt32(row["ClaimDate"]);
newData.ClaimPrice = Convert.ToInt32(row["ClaimPrice"]);
- newData.GroupID = new UUID((String) row["GroupUUID"]);
+ newData.GroupID = new UUID((String)row["GroupUUID"]);
newData.SalePrice = Convert.ToInt32(row["SalePrice"]);
- newData.Status = (ParcelStatus) Convert.ToInt32(row["LandStatus"]);
- //Enum. OpenMetaverse.Parcel.ParcelStatus
+ newData.Status = (ParcelStatus)Convert.ToInt32(row["LandStatus"]);
+ //Enum. OpenMetaverse.Parcel.ParcelStatus
newData.Flags = Convert.ToUInt32(row["LandFlags"]);
- newData.LandingType = (Byte) row["LandingType"];
- newData.MediaAutoScale = (Byte) row["MediaAutoScale"];
- newData.MediaID = new UUID((String) row["MediaTextureUUID"]);
- newData.MediaURL = (String) row["MediaURL"];
- newData.MusicURL = (String) row["MusicURL"];
+ newData.LandingType = (Byte)row["LandingType"];
+ newData.MediaAutoScale = (Byte)row["MediaAutoScale"];
+ newData.MediaID = new UUID((String)row["MediaTextureUUID"]);
+ newData.MediaURL = (String)row["MediaURL"];
+ newData.MusicURL = (String)row["MusicURL"];
newData.PassHours = Convert.ToSingle(row["PassHours"]);
newData.PassPrice = Convert.ToInt32(row["PassPrice"]);
- newData.SnapshotID = (UUID)(String) row["SnapshotUUID"];
+ newData.SnapshotID = (UUID)(String)row["SnapshotUUID"];
try
{
@@ -1471,7 +1625,7 @@ namespace OpenSim.Data.SQLite
{
RegionSettings newSettings = new RegionSettings();
- newSettings.RegionUUID = new UUID((string) row["regionUUID"]);
+ newSettings.RegionUUID = new UUID((string)row["regionUUID"]);
newSettings.BlockTerraform = Convert.ToBoolean(row["block_terraform"]);
newSettings.AllowDamage = Convert.ToBoolean(row["allow_damage"]);
newSettings.BlockFly = Convert.ToBoolean(row["block_fly"]);
@@ -1485,10 +1639,10 @@ namespace OpenSim.Data.SQLite
newSettings.DisableScripts = Convert.ToBoolean(row["disable_scripts"]);
newSettings.DisableCollisions = Convert.ToBoolean(row["disable_collisions"]);
newSettings.DisablePhysics = Convert.ToBoolean(row["disable_physics"]);
- newSettings.TerrainTexture1 = new UUID((String) row["terrain_texture_1"]);
- newSettings.TerrainTexture2 = new UUID((String) row["terrain_texture_2"]);
- newSettings.TerrainTexture3 = new UUID((String) row["terrain_texture_3"]);
- newSettings.TerrainTexture4 = new UUID((String) row["terrain_texture_4"]);
+ newSettings.TerrainTexture1 = new UUID((String)row["terrain_texture_1"]);
+ newSettings.TerrainTexture2 = new UUID((String)row["terrain_texture_2"]);
+ newSettings.TerrainTexture3 = new UUID((String)row["terrain_texture_3"]);
+ newSettings.TerrainTexture4 = new UUID((String)row["terrain_texture_4"]);
newSettings.Elevation1NW = Convert.ToDouble(row["elevation_1_nw"]);
newSettings.Elevation2NW = Convert.ToDouble(row["elevation_2_nw"]);
newSettings.Elevation1NE = Convert.ToDouble(row["elevation_1_ne"]);
@@ -1502,14 +1656,14 @@ namespace OpenSim.Data.SQLite
newSettings.TerrainLowerLimit = Convert.ToDouble(row["terrain_lower_limit"]);
newSettings.UseEstateSun = Convert.ToBoolean(row["use_estate_sun"]);
newSettings.Sandbox = Convert.ToBoolean(row["sandbox"]);
- newSettings.SunVector = new Vector3 (
+ newSettings.SunVector = new Vector3(
Convert.ToSingle(row["sunvectorx"]),
Convert.ToSingle(row["sunvectory"]),
Convert.ToSingle(row["sunvectorz"])
);
newSettings.FixedSun = Convert.ToBoolean(row["fixed_sun"]);
newSettings.SunPosition = Convert.ToDouble(row["sun_position"]);
- newSettings.Covenant = new UUID((String) row["covenant"]);
+ newSettings.Covenant = new UUID((String)row["covenant"]);
newSettings.CovenantChangedDateTime = Convert.ToInt32(row["covenant_datetime"]);
newSettings.TerrainImageID = new UUID((String)row["map_tile_ID"]);
@@ -1517,6 +1671,83 @@ namespace OpenSim.Data.SQLite
}
///
+ /// Build a windlight entry from the persisted data.
+ ///
+ ///
+ /// RegionLightShareData
+ private RegionLightShareData buildRegionWindlight(DataRow row)
+ {
+ RegionLightShareData windlight = new RegionLightShareData();
+
+ windlight.regionID = new UUID((string)row["region_id"]);
+ windlight.waterColor.X = Convert.ToSingle(row["water_color_r"]);
+ windlight.waterColor.Y = Convert.ToSingle(row["water_color_g"]);
+ windlight.waterColor.Z = Convert.ToSingle(row["water_color_b"]);
+ //windlight.waterColor.W = Convert.ToSingle(row["water_color_i"]); //not implemented
+ windlight.waterFogDensityExponent = Convert.ToSingle(row["water_fog_density_exponent"]);
+ windlight.underwaterFogModifier = Convert.ToSingle(row["underwater_fog_modifier"]);
+ windlight.reflectionWaveletScale.X = Convert.ToSingle(row["reflection_wavelet_scale_1"]);
+ windlight.reflectionWaveletScale.Y = Convert.ToSingle(row["reflection_wavelet_scale_2"]);
+ windlight.reflectionWaveletScale.Z = Convert.ToSingle(row["reflection_wavelet_scale_3"]);
+ windlight.fresnelScale = Convert.ToSingle(row["fresnel_scale"]);
+ windlight.fresnelOffset = Convert.ToSingle(row["fresnel_offset"]);
+ windlight.refractScaleAbove = Convert.ToSingle(row["refract_scale_above"]);
+ windlight.refractScaleBelow = Convert.ToSingle(row["refract_scale_below"]);
+ windlight.blurMultiplier = Convert.ToSingle(row["blur_multiplier"]);
+ windlight.bigWaveDirection.X = Convert.ToSingle(row["big_wave_direction_x"]);
+ windlight.bigWaveDirection.Y = Convert.ToSingle(row["big_wave_direction_y"]);
+ windlight.littleWaveDirection.X = Convert.ToSingle(row["little_wave_direction_x"]);
+ windlight.littleWaveDirection.Y = Convert.ToSingle(row["little_wave_direction_y"]);
+ windlight.normalMapTexture = new UUID((string)row["normal_map_texture"]);
+ windlight.horizon.X = Convert.ToSingle(row["horizon_r"]);
+ windlight.horizon.Y = Convert.ToSingle(row["horizon_g"]);
+ windlight.horizon.Z = Convert.ToSingle(row["horizon_b"]);
+ windlight.horizon.W = Convert.ToSingle(row["horizon_i"]);
+ windlight.hazeHorizon = Convert.ToSingle(row["haze_horizon"]);
+ windlight.blueDensity.X = Convert.ToSingle(row["blue_density_r"]);
+ windlight.blueDensity.Y = Convert.ToSingle(row["blue_density_g"]);
+ windlight.blueDensity.Z = Convert.ToSingle(row["blue_density_b"]);
+ windlight.blueDensity.W = Convert.ToSingle(row["blue_density_i"]);
+ windlight.hazeDensity = Convert.ToSingle(row["haze_density"]);
+ windlight.densityMultiplier = Convert.ToSingle(row["density_multiplier"]);
+ windlight.distanceMultiplier = Convert.ToSingle(row["distance_multiplier"]);
+ windlight.maxAltitude = Convert.ToUInt16(row["max_altitude"]);
+ windlight.sunMoonColor.X = Convert.ToSingle(row["sun_moon_color_r"]);
+ windlight.sunMoonColor.Y = Convert.ToSingle(row["sun_moon_color_g"]);
+ windlight.sunMoonColor.Z = Convert.ToSingle(row["sun_moon_color_b"]);
+ windlight.sunMoonColor.W = Convert.ToSingle(row["sun_moon_color_i"]);
+ windlight.sunMoonPosition = Convert.ToSingle(row["sun_moon_position"]);
+ windlight.ambient.X = Convert.ToSingle(row["ambient_r"]);
+ windlight.ambient.Y = Convert.ToSingle(row["ambient_g"]);
+ windlight.ambient.Z = Convert.ToSingle(row["ambient_b"]);
+ windlight.ambient.W = Convert.ToSingle(row["ambient_i"]);
+ windlight.eastAngle = Convert.ToSingle(row["east_angle"]);
+ windlight.sunGlowFocus = Convert.ToSingle(row["sun_glow_focus"]);
+ windlight.sunGlowSize = Convert.ToSingle(row["sun_glow_size"]);
+ windlight.sceneGamma = Convert.ToSingle(row["scene_gamma"]);
+ windlight.starBrightness = Convert.ToSingle(row["star_brightness"]);
+ windlight.cloudColor.X = Convert.ToSingle(row["cloud_color_r"]);
+ windlight.cloudColor.Y = Convert.ToSingle(row["cloud_color_g"]);
+ windlight.cloudColor.Z = Convert.ToSingle(row["cloud_color_b"]);
+ windlight.cloudColor.W = Convert.ToSingle(row["cloud_color_i"]);
+ windlight.cloudXYDensity.X = Convert.ToSingle(row["cloud_x"]);
+ windlight.cloudXYDensity.Y = Convert.ToSingle(row["cloud_y"]);
+ windlight.cloudXYDensity.Z = Convert.ToSingle(row["cloud_density"]);
+ windlight.cloudCoverage = Convert.ToSingle(row["cloud_coverage"]);
+ windlight.cloudScale = Convert.ToSingle(row["cloud_scale"]);
+ windlight.cloudDetailXYDensity.X = Convert.ToSingle(row["cloud_detail_x"]);
+ windlight.cloudDetailXYDensity.Y = Convert.ToSingle(row["cloud_detail_y"]);
+ windlight.cloudDetailXYDensity.Z = Convert.ToSingle(row["cloud_detail_density"]);
+ windlight.cloudScrollX = Convert.ToSingle(row["cloud_scroll_x"]);
+ windlight.cloudScrollXLock = Convert.ToBoolean(row["cloud_scroll_x_lock"]);
+ windlight.cloudScrollY = Convert.ToSingle(row["cloud_scroll_y"]);
+ windlight.cloudScrollYLock = Convert.ToBoolean(row["cloud_scroll_y_lock"]);
+ windlight.drawClassicClouds = Convert.ToBoolean(row["draw_classic_clouds"]);
+
+ return windlight;
+ }
+
+ ///
/// Build a land access entry from the persisted data.
///
///
@@ -1524,8 +1755,8 @@ namespace OpenSim.Data.SQLite
private static LandAccessEntry buildLandAccessData(DataRow row)
{
LandAccessEntry entry = new LandAccessEntry();
- entry.AgentID = new UUID((string) row["AccessUUID"]);
- entry.Flags = (AccessList) row["Flags"];
+ entry.AgentID = new UUID((string)row["AccessUUID"]);
+ entry.Flags = (AccessList)row["Flags"];
entry.Expires = 0;
return entry;
}
@@ -1537,7 +1768,7 @@ namespace OpenSim.Data.SQLite
///
private static Array serializeTerrain(double[,] val)
{
- MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double));
+ MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) * sizeof(double));
BinaryWriter bw = new BinaryWriter(str);
// TODO: COMPATIBILITY - Add byte-order conversions
@@ -1548,21 +1779,21 @@ namespace OpenSim.Data.SQLite
return str.ToArray();
}
-// private void fillTerrainRow(DataRow row, UUID regionUUID, int rev, double[,] val)
-// {
-// row["RegionUUID"] = regionUUID;
-// row["Revision"] = rev;
+ // private void fillTerrainRow(DataRow row, UUID regionUUID, int rev, double[,] val)
+ // {
+ // row["RegionUUID"] = regionUUID;
+ // row["Revision"] = rev;
// MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize)*sizeof (double));
-// BinaryWriter bw = new BinaryWriter(str);
+ // BinaryWriter bw = new BinaryWriter(str);
-// // TODO: COMPATIBILITY - Add byte-order conversions
+ // // TODO: COMPATIBILITY - Add byte-order conversions
// for (int x = 0; x < (int)Constants.RegionSize; x++)
// for (int y = 0; y < (int)Constants.RegionSize; y++)
-// bw.Write(val[x, y]);
+ // bw.Write(val[x, y]);
-// row["Heightfield"] = str.ToArray();
-// }
+ // row["Heightfield"] = str.ToArray();
+ // }
///
///
@@ -1843,6 +2074,79 @@ namespace OpenSim.Data.SQLite
///
///
///
+ ///
+ private static void fillRegionWindlightRow(DataRow row, RegionLightShareData windlight)
+ {
+ row["region_id"] = windlight.regionID.ToString();
+ row["water_color_r"] = windlight.waterColor.X;
+ row["water_color_g"] = windlight.waterColor.Y;
+ row["water_color_b"] = windlight.waterColor.Z;
+ row["water_color_i"] = 1; //windlight.waterColor.W; //not implemented
+ row["water_fog_density_exponent"] = windlight.waterFogDensityExponent;
+ row["underwater_fog_modifier"] = windlight.underwaterFogModifier;
+ row["reflection_wavelet_scale_1"] = windlight.reflectionWaveletScale.X;
+ row["reflection_wavelet_scale_2"] = windlight.reflectionWaveletScale.Y;
+ row["reflection_wavelet_scale_3"] = windlight.reflectionWaveletScale.Z;
+ row["fresnel_scale"] = windlight.fresnelScale;
+ row["fresnel_offset"] = windlight.fresnelOffset;
+ row["refract_scale_above"] = windlight.refractScaleAbove;
+ row["refract_scale_below"] = windlight.refractScaleBelow;
+ row["blur_multiplier"] = windlight.blurMultiplier;
+ row["big_wave_direction_x"] = windlight.bigWaveDirection.X;
+ row["big_wave_direction_y"] = windlight.bigWaveDirection.Y;
+ row["little_wave_direction_x"] = windlight.littleWaveDirection.X;
+ row["little_wave_direction_y"] = windlight.littleWaveDirection.Y;
+ row["normal_map_texture"] = windlight.normalMapTexture.ToString();
+ row["horizon_r"] = windlight.horizon.X;
+ row["horizon_g"] = windlight.horizon.Y;
+ row["horizon_b"] = windlight.horizon.Z;
+ row["horizon_i"] = windlight.horizon.W;
+ row["haze_horizon"] = windlight.hazeHorizon;
+ row["blue_density_r"] = windlight.blueDensity.X;
+ row["blue_density_g"] = windlight.blueDensity.Y;
+ row["blue_density_b"] = windlight.blueDensity.Z;
+ row["blue_density_i"] = windlight.blueDensity.W;
+ row["haze_density"] = windlight.hazeDensity;
+ row["density_multiplier"] = windlight.densityMultiplier;
+ row["distance_multiplier"] = windlight.distanceMultiplier;
+ row["max_altitude"] = windlight.maxAltitude;
+ row["sun_moon_color_r"] = windlight.sunMoonColor.X;
+ row["sun_moon_color_g"] = windlight.sunMoonColor.Y;
+ row["sun_moon_color_b"] = windlight.sunMoonColor.Z;
+ row["sun_moon_color_i"] = windlight.sunMoonColor.W;
+ row["sun_moon_position"] = windlight.sunMoonPosition;
+ row["ambient_r"] = windlight.ambient.X;
+ row["ambient_g"] = windlight.ambient.Y;
+ row["ambient_b"] = windlight.ambient.Z;
+ row["ambient_i"] = windlight.ambient.W;
+ row["east_angle"] = windlight.eastAngle;
+ row["sun_glow_focus"] = windlight.sunGlowFocus;
+ row["sun_glow_size"] = windlight.sunGlowSize;
+ row["scene_gamma"] = windlight.sceneGamma;
+ row["star_brightness"] = windlight.starBrightness;
+ row["cloud_color_r"] = windlight.cloudColor.X;
+ row["cloud_color_g"] = windlight.cloudColor.Y;
+ row["cloud_color_b"] = windlight.cloudColor.Z;
+ row["cloud_color_i"] = windlight.cloudColor.W;
+ row["cloud_x"] = windlight.cloudXYDensity.X;
+ row["cloud_y"] = windlight.cloudXYDensity.Y;
+ row["cloud_density"] = windlight.cloudXYDensity.Z;
+ row["cloud_coverage"] = windlight.cloudCoverage;
+ row["cloud_scale"] = windlight.cloudScale;
+ row["cloud_detail_x"] = windlight.cloudDetailXYDensity.X;
+ row["cloud_detail_y"] = windlight.cloudDetailXYDensity.Y;
+ row["cloud_detail_density"] = windlight.cloudDetailXYDensity.Z;
+ row["cloud_scroll_x"] = windlight.cloudScrollX;
+ row["cloud_scroll_x_lock"] = windlight.cloudScrollXLock;
+ row["cloud_scroll_y"] = windlight.cloudScrollY;
+ row["cloud_scroll_y_lock"] = windlight.cloudScrollYLock;
+ row["draw_classic_clouds"] = windlight.drawClassicClouds;
+ }
+
+ ///
+ ///
+ ///
+ ///
///
private PrimitiveBaseShape buildShape(DataRow row)
{
@@ -1878,7 +2182,7 @@ namespace OpenSim.Data.SQLite
byte[] textureEntry = (byte[])row["Texture"];
s.TextureEntry = textureEntry;
- s.ExtraParams = (byte[]) row["ExtraParams"];
+ s.ExtraParams = (byte[])row["ExtraParams"];
if (!(row["Media"] is System.DBNull))
s.Media = PrimitiveBaseShape.MediaList.FromXml((string)row["Media"]);
@@ -1986,10 +2290,10 @@ namespace OpenSim.Data.SQLite
// repalce with current inventory details
foreach (TaskInventoryItem newItem in items)
{
-// m_log.InfoFormat(
-// "[DATASTORE]: ",
-// "Adding item {0}, {1} to prim ID {2}",
-// newItem.Name, newItem.ItemID, newItem.ParentPartID);
+ // m_log.InfoFormat(
+ // "[DATASTORE]: ",
+ // "Adding item {0}, {1} to prim ID {2}",
+ // newItem.Name, newItem.ItemID, newItem.ParentPartID);
DataRow newItemRow = dbItems.NewRow();
fillItemRow(newItemRow, newItem);
@@ -2040,7 +2344,7 @@ namespace OpenSim.Data.SQLite
sql += ") values (:";
sql += String.Join(", :", cols);
sql += ")";
- //m_log.DebugFormat("[SQLITE]: Created insert command {0}", sql);
+// m_log.DebugFormat("[SQLITE]: Created insert command {0}", sql);
SqliteCommand cmd = new SqliteCommand(sql);
// this provides the binding for all our parameters, so
@@ -2192,7 +2496,7 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
SqliteCommand delete = new SqliteCommand("delete from prims where UUID = :UUID");
- delete.Parameters.Add(createSqliteParameter("UUID", typeof (String)));
+ delete.Parameters.Add(createSqliteParameter("UUID", typeof(String)));
delete.Connection = conn;
da.DeleteCommand = delete;
}
@@ -2211,7 +2515,7 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
SqliteCommand delete = new SqliteCommand("delete from primitems where itemID = :itemID");
- delete.Parameters.Add(createSqliteParameter("itemID", typeof (String)));
+ delete.Parameters.Add(createSqliteParameter("itemID", typeof(String)));
delete.Connection = conn;
da.DeleteCommand = delete;
}
@@ -2279,6 +2583,19 @@ namespace OpenSim.Data.SQLite
///
///
///
+ private void setupRegionWindlightCommands(SqliteDataAdapter da, SqliteConnection conn)
+ {
+ da.InsertCommand = createInsertCommand("regionwindlight", ds.Tables["regionwindlight"]);
+ da.InsertCommand.Connection = conn;
+ da.UpdateCommand = createUpdateCommand("regionwindlight", "region_id=:region_id", ds.Tables["regionwindlight"]);
+ da.UpdateCommand.Connection = conn;
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn)
{
da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]);
@@ -2288,7 +2605,7 @@ namespace OpenSim.Data.SQLite
da.UpdateCommand.Connection = conn;
SqliteCommand delete = new SqliteCommand("delete from primshapes where UUID = :UUID");
- delete.Parameters.Add(createSqliteParameter("UUID", typeof (String)));
+ delete.Parameters.Add(createSqliteParameter("UUID", typeof(String)));
delete.Connection = conn;
da.DeleteCommand = delete;
}
@@ -2306,27 +2623,27 @@ namespace OpenSim.Data.SQLite
///
private static DbType dbtypeFromType(Type type)
{
- if (type == typeof (String))
+ if (type == typeof(String))
{
return DbType.String;
}
- else if (type == typeof (Int32))
+ else if (type == typeof(Int32))
{
return DbType.Int32;
}
- else if (type == typeof (Double))
+ else if (type == typeof(Double))
{
return DbType.Double;
}
- else if (type == typeof (Byte))
+ else if (type == typeof(Byte))
{
return DbType.Byte;
}
- else if (type == typeof (Double))
+ else if (type == typeof(Double))
{
return DbType.Double;
}
- else if (type == typeof (Byte[]))
+ else if (type == typeof(Byte[]))
{
return DbType.Binary;
}
@@ -2338,32 +2655,32 @@ namespace OpenSim.Data.SQLite
static void PrintDataSet(DataSet ds)
{
- // Print out any name and extended properties.
- Console.WriteLine("DataSet is named: {0}", ds.DataSetName);
- foreach (System.Collections.DictionaryEntry de in ds.ExtendedProperties)
- {
- Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
- }
- Console.WriteLine();
- foreach (DataTable dt in ds.Tables)
- {
- Console.WriteLine("=> {0} Table:", dt.TableName);
- // Print out the column names.
- for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
+ // Print out any name and extended properties.
+ Console.WriteLine("DataSet is named: {0}", ds.DataSetName);
+ foreach (System.Collections.DictionaryEntry de in ds.ExtendedProperties)
{
- Console.Write(dt.Columns[curCol].ColumnName + "\t");
+ Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
}
- Console.WriteLine("\n----------------------------------");
- // Print the DataTable.
- for (int curRow = 0; curRow < dt.Rows.Count; curRow++)
+ Console.WriteLine();
+ foreach (DataTable dt in ds.Tables)
{
- for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
- {
- Console.Write(dt.Rows[curRow][curCol].ToString() + "\t");
- }
- Console.WriteLine();
+ Console.WriteLine("=> {0} Table:", dt.TableName);
+ // Print out the column names.
+ for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
+ {
+ Console.Write(dt.Columns[curCol].ColumnName + "\t");
+ }
+ Console.WriteLine("\n----------------------------------");
+ // Print the DataTable.
+ for (int curRow = 0; curRow < dt.Rows.Count; curRow++)
+ {
+ for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
+ {
+ Console.Write(dt.Rows[curRow][curCol].ToString() + "\t");
+ }
+ Console.WriteLine();
+ }
}
- }
}
}
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index 2e620ff..a820ddf 100755
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -484,7 +484,6 @@
;; such as the Meta7 viewer.
;; It has no ill effect on viewers which do not support server-side
;; windlight settings.
- ;; Currently we only have support for MySQL databases.
; enable_windlight = false
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 3fd3d31..fab2c47 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -1070,7 +1070,6 @@
[LightShare]
; This enables the transmission of Windlight scenes to supporting clients, such as the Meta7 viewer.
; It has no ill effect on viewers which do not support server-side windlight settings.
- ; Currently we only have support for MySQL databases.
enable_windlight = false
--
cgit v1.1
From 4589ce61bc68311d6ab7b5e7aa40ed1def40f52e Mon Sep 17 00:00:00 2001
From: PixelTomsen
Date: Sat, 11 Feb 2012 19:00:01 +0100
Subject: Fix: get embedded objects from Notecard fails with activated
FreeSwitchVoiceModul
http://opensimulator.org/mantis/view.php?id=2607
---
.../Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
index 5323a95..05678c0 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
@@ -63,9 +63,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// Capability string prefixes
- private static readonly string m_parcelVoiceInfoRequestPath = "0007/";
- private static readonly string m_provisionVoiceAccountRequestPath = "0008/";
- private static readonly string m_chatSessionRequestPath = "0009/";
+ private static readonly string m_parcelVoiceInfoRequestPath = "0207/";
+ private static readonly string m_provisionVoiceAccountRequestPath = "0208/";
+ private static readonly string m_chatSessionRequestPath = "0209/";
// Control info
private static bool m_Enabled = false;
--
cgit v1.1
From a9e8bd59a377e7c7ce81e3693875467926dd7d4b Mon Sep 17 00:00:00 2001
From: Mic Bowman
Date: Mon, 13 Feb 2012 19:38:22 -0800
Subject: Fix a race condition in the simian groups connector. When requests
were too slow they would circumvent the cache (piling up on the network
service and making the problem even worse). This condition happens frequently
during permission checks.
---
.../SimianGroupsServicesConnectorModule.cs | 71 +++++++++++++++++++---
1 file changed, 63 insertions(+), 8 deletions(-)
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
index 42008da..130513d 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/SimianGroupsServicesConnectorModule.cs
@@ -30,6 +30,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Reflection;
+using System.Threading;
using Nwc.XmlRpc;
@@ -167,6 +168,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
private bool m_debugEnabled = false;
+ private Dictionary m_pendingRequests = new Dictionary();
+
private ExpiringCache m_memoryCache;
private int m_cacheTimeout = 30;
@@ -1348,6 +1351,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// Immediately forward the request if the cache is disabled.
if (m_cacheTimeout == 0)
{
+ m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: cache is disabled");
return WebUtil.PostToService(m_groupsServerURI, requestArgs);
}
@@ -1355,6 +1359,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
if (requestArgs["RequestMethod"] == "RemoveGeneric"
|| requestArgs["RequestMethod"] == "AddGeneric")
{
+ m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: clearing generics cache");
+
// Any and all updates cause the cache to clear
m_memoryCache.Clear();
@@ -1366,18 +1372,67 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// Create the cache key for the request and see if we have it cached
string CacheKey = WebUtil.BuildQueryString(requestArgs);
- OSDMap response = null;
- if (!m_memoryCache.TryGetValue(CacheKey, out response))
+
+ // This code uses a leader/follower pattern. On a cache miss, the request is added
+ // to a queue; the first thread to add it to the queue completes the request while
+ // follow on threads busy wait for the results, this situation seems to happen
+ // often when checking permissions
+ while (true)
{
- // if it wasn't in the cache, pass the request to the Simian Grid Services
- response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
+ OSDMap response = null;
+ bool firstRequest = false;
- // and cache the response
- m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
+ lock (m_memoryCache)
+ {
+ if (m_memoryCache.TryGetValue(CacheKey, out response))
+ return response;
+
+ if (! m_pendingRequests.ContainsKey(CacheKey))
+ {
+ m_pendingRequests.Add(CacheKey,true);
+ firstRequest = true;
+ }
+ }
+
+ if (firstRequest)
+ {
+ // if it wasn't in the cache, pass the request to the Simian Grid Services
+ try
+ {
+ response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
+ }
+ catch (Exception e)
+ {
+ m_log.InfoFormat("[SIMIAN GROUPS CONNECTOR] request failed {0}",CacheKey);
+ }
+
+ // and cache the response
+ lock (m_memoryCache)
+ {
+ m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
+ m_pendingRequests.Remove(CacheKey);
+ }
+
+ return response;
+ }
+
+ Thread.Sleep(50); // waiting for a web request to complete, 50msecs is reasonable
}
- // return cached response
- return response;
+ // if (!m_memoryCache.TryGetValue(CacheKey, out response))
+ // {
+ // m_log.WarnFormat("[SIMIAN GROUPS CONNECTOR]: query not in the cache");
+ // Util.PrintCallStack();
+
+ // // if it wasn't in the cache, pass the request to the Simian Grid Services
+ // response = WebUtil.PostToService(m_groupsServerURI, requestArgs);
+
+ // // and cache the response
+ // m_memoryCache.AddOrUpdate(CacheKey, response, TimeSpan.FromSeconds(m_cacheTimeout));
+ // }
+
+ // // return cached response
+ // return response;
}
#endregion
--
cgit v1.1
From 2ebb421331c4e6c4f57e0cc1bab79cea70937172 Mon Sep 17 00:00:00 2001
From: Dan Lake
Date: Tue, 14 Feb 2012 17:20:34 -0800
Subject: Refactor appearance saving for NPC to use AvatarFactoryModule
interface.
---
.../Avatar/AvatarFactory/AvatarFactoryModule.cs | 40 +++++++++++++++++-----
.../Framework/Interfaces/IAvatarFactoryModule.cs | 1 +
.../Region/OptionalModules/World/NPC/NPCModule.cs | 12 +++----
3 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 8d503bd..c7f4c20 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -111,6 +111,15 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
#region IAvatarFactoryModule
+ ///
+ ///
+ ///
+ ///
+ public void SetAppearance(IScenePresence sp, AvatarAppearance appearance)
+ {
+ SetAppearance(sp, appearance.Texture, appearance.VisualParams);
+ }
+
///
/// Set appearance data (texture asset IDs and slider settings)
///
@@ -156,14 +165,23 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
changed = sp.Appearance.SetTextureEntries(textureEntry) || changed;
// WriteBakedTexturesReport(sp, m_log.DebugFormat);
- if (!ValidateBakedTextureCache(sp))
+
+ // If bake textures are missing and this is not an NPC, request a rebake from client
+ if (!ValidateBakedTextureCache(sp) && (((ScenePresence)sp).PresenceType != PresenceType.Npc))
RequestRebake(sp, true);
// This appears to be set only in the final stage of the appearance
// update transaction. In theory, we should be able to do an immediate
// appearance send and save here.
}
-
+
+ // NPC should send to clients immediately and skip saving appearance
+ if (((ScenePresence)sp).PresenceType == PresenceType.Npc)
+ {
+ SendAppearance((ScenePresence)sp);
+ return;
+ }
+
// save only if there were changes, send no matter what (doesn't hurt to send twice)
if (changed)
QueueAppearanceSave(sp.ControllingClient.AgentId);
@@ -174,6 +192,15 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
// m_log.WarnFormat("[AVFACTORY]: complete SetAppearance for {0}:\n{1}",client.AgentId,sp.Appearance.ToString());
}
+ private void SendAppearance(ScenePresence sp)
+ {
+ // Send the appearance to everyone in the scene
+ sp.SendAppearanceToAllOtherAgents();
+
+ // Send animations back to the avatar as well
+ sp.Animator.SendAnimPack();
+ }
+
public bool SendAppearance(UUID agentId)
{
// m_log.DebugFormat("[AVFACTORY]: Sending appearance for {0}", agentId);
@@ -185,12 +212,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
return false;
}
- // Send the appearance to everyone in the scene
- sp.SendAppearanceToAllOtherAgents();
-
- // Send animations back to the avatar as well
- sp.Animator.SendAnimPack();
-
+ SendAppearance(sp);
return true;
}
@@ -626,4 +648,4 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
outputAction("{0} baked appearance texture is {1}", sp.Name, bakedTextureValid ? "OK" : "corrupt");
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
index 39a760c..34aca33 100644
--- a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
@@ -35,6 +35,7 @@ namespace OpenSim.Region.Framework.Interfaces
public interface IAvatarFactoryModule
{
+ void SetAppearance(IScenePresence sp, AvatarAppearance appearance);
void SetAppearance(IScenePresence sp, Primitive.TextureEntry textureEntry, byte[] visualParams);
///
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index dc6eefc..5359354 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -96,15 +96,15 @@ namespace OpenSim.Region.OptionalModules.World.NPC
if (!m_avatars.ContainsKey(agentId))
return false;
+ // Delete existing sp attachments
scene.AttachmentsModule.DeleteAttachmentsFromScene(sp, false);
- AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);
- sp.Appearance = npcAppearance;
+ // Set new sp appearance. Also sends to clients.
+ scene.RequestModuleInterface().SetAppearance(sp, new AvatarAppearance(appearance, true));
+
+ // Rez needed sp attachments
scene.AttachmentsModule.RezAttachments(sp);
-
- IAvatarFactoryModule module = scene.RequestModuleInterface();
- module.SendAppearance(sp.UUID);
-
+
return true;
}
--
cgit v1.1
From ebe5e1731d24e68ec7a8aa61a397f5febc1c2662 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 15 Feb 2012 01:45:25 +0000
Subject: In ObjectTortureTests, run garbage collector on Teardown and run
scene loop update when scene objects have been deleted.
At least on mono 2.6.4, running GC.Collect() is not guaranteed to force gc of all objects when run in the same method where those objects had references.
Therefore, GC.Collect() is now being done in the per-script teardown of ObjectTortureTests.
In addition, scene loop update is being run after garbage collection in order to clean out the viewer update list of scene objects in the SceneGraph.
These measures mean that scene objects/parts are now garbage collected after a test run if deleted from the scene, resulting in a much better memory usage report (though probably still not very accurate).
However, deletion takes a very long time - what's really needed is to find out now why the entire scene isn't being GC'd by this measure.
This change hasn't yet been applied to the other stress tests.
---
OpenSim/Region/Framework/Scenes/SceneGraph.cs | 10 +++---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 3 ++
.../Scenes/Tests/SceneObjectBasicTests.cs | 41 ++++++++++++++++++++--
OpenSim/Tests/Common/Mock/TestScene.cs | 3 +-
OpenSim/Tests/Torture/ObjectTortureTests.cs | 21 +++++++++--
5 files changed, 68 insertions(+), 10 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 693a79e..e66678a 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -359,7 +359,7 @@ namespace OpenSim.Region.Framework.Scenes
m_log.ErrorFormat(
"[SCENEGRAPH]: Tried to add scene object {0} to {1} with illegal UUID of {2}",
sceneObject.Name, m_parentScene.RegionInfo.RegionName, UUID.Zero);
-
+
return false;
}
@@ -368,12 +368,12 @@ namespace OpenSim.Region.Framework.Scenes
// m_log.DebugFormat(
// "[SCENEGRAPH]: Scene graph for {0} already contains object {1} in AddSceneObject()",
// m_parentScene.RegionInfo.RegionName, sceneObject.UUID);
-
+
return false;
}
-
+
// m_log.DebugFormat(
-// "[SCENEGRAPH]: Adding scene object {0} {1}, with {2} parts on {3}",
+// "[SCENEGRAPH]: Adding scene object {0} {1}, with {2} parts on {3}",
// sceneObject.Name, sceneObject.UUID, sceneObject.Parts.Length, m_parentScene.RegionInfo.RegionName);
SceneObjectPart[] parts = sceneObject.Parts;
@@ -409,7 +409,7 @@ namespace OpenSim.Region.Framework.Scenes
lock (SceneObjectGroupsByFullID)
SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject;
-
+
lock (SceneObjectGroupsByFullPartID)
{
foreach (SceneObjectPart part in parts)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 4c339d9..b130bf7 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -303,6 +303,9 @@ namespace OpenSim.Region.Framework.Scenes
// ~SceneObjectPart()
// {
+// Console.WriteLine(
+// "[SCENE OBJECT PART]: Destructor called for {0}, local id {1}, parent {2} {3}",
+// Name, LocalId, ParentGroup.Name, ParentGroup.LocalId);
// m_log.DebugFormat(
// "[SCENE OBJECT PART]: Destructor called for {0}, local id {1}, parent {2} {3}",
// Name, LocalId, ParentGroup.Name, ParentGroup.LocalId);
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs
index 80f198d..7737d8e 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs
@@ -27,6 +27,7 @@
using System;
using System.Reflection;
+using System.Threading;
using NUnit.Framework;
using OpenMetaverse;
using OpenSim.Framework;
@@ -43,6 +44,42 @@ namespace OpenSim.Region.Framework.Scenes.Tests
[TestFixture]
public class SceneObjectBasicTests
{
+// [TearDown]
+// public void TearDown()
+// {
+// Console.WriteLine("TearDown");
+// GC.Collect();
+// Thread.Sleep(3000);
+// }
+
+// public class GcNotify
+// {
+// public static AutoResetEvent gcEvent = new AutoResetEvent(false);
+// private static bool _initialized = false;
+//
+// public static void Initialize()
+// {
+// if (!_initialized)
+// {
+// _initialized = true;
+// new GcNotify();
+// }
+// }
+//
+// private GcNotify(){}
+//
+// ~GcNotify()
+// {
+// if (!Environment.HasShutdownStarted &&
+// !AppDomain.CurrentDomain.IsFinalizingForUnload())
+// {
+// Console.WriteLine("GcNotify called");
+// gcEvent.Set();
+// new GcNotify();
+// }
+// }
+// }
+
///
/// Test adding an object to a scene.
///
@@ -147,11 +184,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void TestDeleteSceneObject()
{
TestHelpers.InMethod();
-
+
TestScene scene = SceneHelpers.SetupScene();
SceneObjectPart part = SceneHelpers.AddSceneObject(scene);
scene.DeleteSceneObject(part.ParentGroup, false);
-
+
SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
Assert.That(retrievedPart, Is.Null);
}
diff --git a/OpenSim/Tests/Common/Mock/TestScene.cs b/OpenSim/Tests/Common/Mock/TestScene.cs
index 328cd2b..eea68c3 100644
--- a/OpenSim/Tests/Common/Mock/TestScene.cs
+++ b/OpenSim/Tests/Common/Mock/TestScene.cs
@@ -50,7 +50,8 @@ namespace OpenSim.Tests.Common.Mock
~TestScene()
{
- Console.WriteLine("TestScene destructor called for {0}", RegionInfo.RegionName);
+ //Console.WriteLine("TestScene destructor called for {0}", RegionInfo.RegionName);
+ Console.WriteLine("TestScene destructor called");
}
///
diff --git a/OpenSim/Tests/Torture/ObjectTortureTests.cs b/OpenSim/Tests/Torture/ObjectTortureTests.cs
index 74b336e..e83186a 100644
--- a/OpenSim/Tests/Torture/ObjectTortureTests.cs
+++ b/OpenSim/Tests/Torture/ObjectTortureTests.cs
@@ -49,6 +49,13 @@ namespace OpenSim.Tests.Torture
[TestFixture]
public class ObjectTortureTests
{
+ [TearDown]
+ public void TearDown()
+ {
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+ }
+
// [Test]
// public void Test0000Clean()
// {
@@ -141,8 +148,18 @@ namespace OpenSim.Tests.Torture
string.Format("Object {0} could not be retrieved", i));
}
- // This does not work to fire the SceneObjectGroup destructors - something else is hanging on to them.
-// scene.DeleteAllSceneObjects();
+ // When a scene object is added to a scene, it is placed in the update list for sending to viewers
+ // (though in this case we have none). When it is deleted, it is not removed from the update which is
+ // fine since it will later be ignored.
+ //
+ // However, that means that we need to manually run an update here to clear out that list so that deleted
+ // objects will be clean up by the garbage collector before the next stress test is run.
+ scene.Update();
+
+ // Currently, we need to do this in order to garbage collect the scene objects ready for the next test run.
+ // However, what we really need to do is find out why the entire scene is not garbage collected in
+ // teardown.
+ scene.DeleteAllSceneObjects();
Console.WriteLine(
"Took {0}ms, {1}MB ({2} - {3}) to create {4} objects each containing {5} prim(s)",
--
cgit v1.1