diff --git a/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs b/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs
index f49641f1a7..f524490523 100644
--- a/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs
+++ b/OpenSim/Region/CoreModules/LightShare/LightShareModule.cs
@@ -153,6 +153,9 @@ namespace OpenSim.Region.CoreModules.World.LightShare
public void SendProfileToClient(IClientAPI client, RegionLightShareData wl)
{
+ if (client == null)
+ return;
+
if (m_enableWindlight)
{
if (m_scene.RegionInfo.WindlightSettings.valid)
diff --git a/OpenSim/Region/CoreModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/CoreModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
index 98396ff803..dc54c3f821 100644
--- a/OpenSim/Region/CoreModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
+++ b/OpenSim/Region/CoreModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
@@ -361,6 +361,22 @@ namespace OpenSim.Region.OptionalModules.Scripting.ScriptModuleComms
return null;
}
+ ///
+ /// Get all registered constants
+ ///
+ public Dictionary GetConstants()
+ {
+ Dictionary ret = new Dictionary();
+
+ lock (m_constants)
+ {
+ foreach (KeyValuePair kvp in m_constants)
+ ret[kvp.Key] = kvp.Value;
+ }
+
+ return ret;
+ }
+
#endregion
}
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
index 93930ce43b..70ff9549e8 100644
--- a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
+++ b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
@@ -27,6 +27,7 @@
using System;
using System.Reflection;
+using System.Collections.Generic;
using OpenMetaverse;
namespace OpenSim.Region.Framework.Interfaces
@@ -131,6 +132,7 @@ namespace OpenSim.Region.Framework.Interfaces
/// Name of constant
/// Value of constant or null if none found.
object LookupModConstant(string cname);
+ Dictionary GetConstants();
// For use ONLY by the script API
void RaiseEvent(UUID script, string id, string module, string command, string key);
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index e2414ebd21..8691b91d3f 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -2947,6 +2947,7 @@ namespace OpenSim.Region.Framework.Scenes
{
foreach (Action d in handler.GetInvocationList())
{
+ m_log.InfoFormat("[EVENT MANAGER]: TriggerSceneShuttingDown invoque {0}", d.Method.Name.ToString());
try
{
d(s);
@@ -2959,6 +2960,7 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
+ m_log.Info("[EVENT MANAGER]: TriggerSceneShuttingDown done");
}
public void TriggerOnRegionStarted(Scene scene)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 4282b46c56..254333301e 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1335,9 +1335,11 @@ namespace OpenSim.Region.Framework.Scenes
// Stop all client threads.
ForEachScenePresence(delegate(ScenePresence avatar) { avatar.ControllingClient.Close(); });
- m_log.Debug("[SCENE]: Persisting changed objects");
+ m_log.Debug("[SCENE]: TriggerSceneShuttingDown");
EventManager.TriggerSceneShuttingDown(this);
+ m_log.Debug("[SCENE]: Persisting changed objects");
+
EntityBase[] entities = GetEntities();
foreach (EntityBase entity in entities)
{
@@ -1347,6 +1349,7 @@ namespace OpenSim.Region.Framework.Scenes
}
}
+ m_log.Debug("[SCENE]: Graph close");
m_sceneGraph.Close();
if (!GridService.DeregisterRegion(RegionInfo.RegionID))
@@ -1359,6 +1362,7 @@ namespace OpenSim.Region.Framework.Scenes
// attempt to reference a null or disposed physics scene.
if (PhysicsScene != null)
{
+ m_log.Debug("[SCENE]: Dispose Physics");
PhysicsScene phys = PhysicsScene;
// remove the physics engine from both Scene and SceneGraph
PhysicsScene = null;
@@ -1401,6 +1405,9 @@ namespace OpenSim.Region.Framework.Scenes
}
// m_lastUpdate = Util.EnvironmentTickCount();
+// m_sceneGraph.PreparePhysicsSimulation();
+
+
m_heartbeatThread
= Watchdog.StartThread(
Heartbeat, string.Format("Heartbeat ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false, false);
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 5714fdd6c3..2191cfa4d4 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -813,7 +813,7 @@ namespace OpenSim.Region.Framework.Scenes
actor.Orientation = GetWorldRotation();
// Tell the physics engines that this prim changed.
- if (ParentGroup.Scene != null)
+ if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene != null)
ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(actor);
}
diff --git a/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs b/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs
index 29fdda4af6..6e1a105bff 100644
--- a/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs
+++ b/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs
@@ -1057,25 +1057,22 @@ namespace OpenSim.Region.Physics.Meshing
mesh.RefCount++;
return mesh;
}
- }
- // try to find a identical mesh on meshs recently released
- lock (m_uniqueReleasedMeshes)
- {
- m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
- if (mesh != null)
+ // try to find a identical mesh on meshs recently released
+ lock (m_uniqueReleasedMeshes)
{
- m_uniqueReleasedMeshes.Remove(key);
- lock (m_uniqueMeshes)
+ m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
+ if (mesh != null)
{
+ m_uniqueReleasedMeshes.Remove(key);
try
{
m_uniqueMeshes.Add(key, mesh);
}
catch { }
+ mesh.RefCount = 1;
+ return mesh;
}
- mesh.RefCount = 1;
- return mesh;
}
}
return null;
@@ -1108,25 +1105,22 @@ namespace OpenSim.Region.Physics.Meshing
mesh.RefCount++;
return mesh;
}
- }
- // try to find a identical mesh on meshs recently released
- lock (m_uniqueReleasedMeshes)
- {
- m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
- if (mesh != null)
+ // try to find a identical mesh on meshs recently released
+ lock (m_uniqueReleasedMeshes)
{
- m_uniqueReleasedMeshes.Remove(key);
- lock (m_uniqueMeshes)
+ m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
+ if (mesh != null)
{
+ m_uniqueReleasedMeshes.Remove(key);
try
{
m_uniqueMeshes.Add(key, mesh);
}
catch { }
+ mesh.RefCount = 1;
+ return mesh;
}
- mesh.RefCount = 1;
- return mesh;
}
}
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs
index 73dd2fd49b..5030cec783 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs
@@ -914,8 +914,9 @@ namespace OpenSim.Region.Physics.OdePlugin
if (repData.pbs.SculptTexture != repData.assetID)
return;
- repData.pbs.SculptData = new byte[asset.Data.Length];
- asset.Data.CopyTo(repData.pbs.SculptData,0);
+// repData.pbs.SculptData = new byte[asset.Data.Length];
+// asset.Data.CopyTo(repData.pbs.SculptData,0);
+ repData.pbs.SculptData = asset.Data;
repData.meshState = MeshState.AssetOK;
m_worker.AssetLoaded(repData);
}
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
index ce67cc469e..76e42d4417 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
@@ -1108,6 +1108,8 @@ namespace OpenSim.Region.Physics.OdePlugin
ODEPhysRepData repData = _parent_scene.m_meshWorker.NewActorPhysRep(this, _pbs, _size, m_shapetype);
primVolume = repData.volume;
+ m_OBB = repData.OBB;
+ m_OBBOffset = repData.OBBOffset;
UpdatePrimBodyData();
}
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
index b98f177e86..54bc29f2f8 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
@@ -1689,11 +1689,10 @@ namespace OpenSim.Region.Physics.OdePlugin
///
public override float Simulate(float timeStep)
{
-
DateTime now = DateTime.UtcNow;
TimeSpan timedif = now - m_lastframe;
- m_lastframe = now;
timeStep = (float)timedif.TotalSeconds;
+ m_lastframe = now;
// acumulate time so we can reduce error
step_time += timeStep;
@@ -1704,6 +1703,7 @@ namespace OpenSim.Region.Physics.OdePlugin
if (framecount < 0)
framecount = 0;
+
framecount++;
int curphysiteractions;
@@ -1714,9 +1714,8 @@ namespace OpenSim.Region.Physics.OdePlugin
else
curphysiteractions = m_physicsiterations;
- int nodeframes = 0;
-
// checkThread();
+ int nodeframes = 0;
lock (SimulationLock)
lock(OdeLock)
@@ -1733,7 +1732,11 @@ namespace OpenSim.Region.Physics.OdePlugin
d.WorldSetQuickStepNumIterations(world, curphysiteractions);
- while (step_time > HalfOdeStep && nodeframes < 10) //limit number of steps so we don't say here for ever
+ int loopstartMS = Util.EnvironmentTickCount();
+ int looptimeMS = 0;
+
+
+ while (step_time > HalfOdeStep)
{
try
{
@@ -1742,9 +1745,8 @@ namespace OpenSim.Region.Physics.OdePlugin
if (ChangesQueue.Count > 0)
{
- int ttmpstart = Util.EnvironmentTickCount();
+ int changestartMS = Util.EnvironmentTickCount();
int ttmp;
-
while (ChangesQueue.Dequeue(out item))
{
if (item.actor != null)
@@ -1762,7 +1764,7 @@ namespace OpenSim.Region.Physics.OdePlugin
item.actor.Name, item.what.ToString());
}
}
- ttmp = Util.EnvironmentTickCountSubtract(ttmpstart);
+ ttmp = Util.EnvironmentTickCountSubtract(changestartMS);
if (ttmp > 20)
break;
}
@@ -1873,9 +1875,12 @@ namespace OpenSim.Region.Physics.OdePlugin
// ode.dunlock(world);
}
-
step_time -= ODE_STEPSIZE;
nodeframes++;
+
+ looptimeMS = Util.EnvironmentTickCountSubtract(loopstartMS);
+ if (looptimeMS > 100)
+ break;
}
lock (_badCharacter)
@@ -1963,7 +1968,7 @@ namespace OpenSim.Region.Physics.OdePlugin
// think time dilation as to do with dinamic step size that we dont' have
// even so tell something to world
- if (nodeframes < 10) // we did the requested loops
+ if (looptimeMS < 100) // we did the requested loops
m_timeDilation = 1.0f;
else if (step_time > 0)
{
@@ -1972,6 +1977,7 @@ namespace OpenSim.Region.Physics.OdePlugin
m_timeDilation = 1;
if (step_time > m_SkipFramesAtms)
step_time = 0;
+ m_lastframe = DateTime.UtcNow; // skip also the time lost
}
}
@@ -2344,7 +2350,7 @@ namespace OpenSim.Region.Physics.OdePlugin
}
}
}
- IntPtr HeightmapData = d.GeomHeightfieldDataCreate();
+ IntPtr HeightmapData = d.GeomUbitTerrainDataCreate();
const int wrap = 0;
float thickness = hfmin;
diff --git a/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs b/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs
index 7429293c3c..7688e0fb3a 100644
--- a/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs
+++ b/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs
@@ -153,9 +153,9 @@ namespace OpenSim.Services.Connectors
}
catch (Exception e)
{
- m_log.WarnFormat(
- "[NEIGHBOUR SERVICE CONNCTOR]: Unable to send HelloNeighbour from {0} to {1}. Exception {2}{3}",
- thisRegion.RegionName, region.RegionName, e.Message, e.StackTrace);
+// m_log.WarnFormat(
+// "[NEIGHBOUR SERVICE CONNCTOR]: Unable to send HelloNeighbour from {0} to {1}. Exception {2}{3}",
+// thisRegion.RegionName, region.RegionName, e.Message, e.StackTrace);
return false;
}
@@ -202,4 +202,4 @@ namespace OpenSim.Services.Connectors
return true;
}
}
-}
\ No newline at end of file
+}