* Commit a variety of fixes to bugs discovered while trying to fix the NaN singularity.
* WebStatsModule doesn't crash on restart. GodsModule doesn't crash when there is no Dialog Module. LLUDPServer doesn't crash when the Operation was Aborted. * ODEPlugin does 'Almost NaN' sanity checks. * ODEPlugin sacrifices NaN avatars to the NaN black hole to appease it and keep it from sucking the rest of the world in.0.6.5-rc1
parent
ab83af0341
commit
c2e75aecd1
|
@ -199,6 +199,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
int numCollected = 0;
|
int numCollected = 0;
|
||||||
//First of all make sure our packet queue isn't above our threshold
|
//First of all make sure our packet queue isn't above our threshold
|
||||||
|
if (m_client == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_client.PacketHandler == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_client.PacketHandler.PacketQueue == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
if (m_client.PacketHandler.PacketQueue.TextureOutgoingPacketQueueCount < 200)
|
if (m_client.PacketHandler.PacketQueue.TextureOutgoingPacketQueueCount < 200)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -378,6 +378,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
case SocketError.NetworkReset:
|
case SocketError.NetworkReset:
|
||||||
case SocketError.ConnectionReset:
|
case SocketError.ConnectionReset:
|
||||||
|
case SocketError.OperationAborted:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -80,7 +80,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_dialogModule.SendAlertToUser(agentID, "Request for god powers denied");
|
if (m_dialogModule != null)
|
||||||
|
m_dialogModule.SendAlertToUser(agentID, "Request for god powers denied");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -939,11 +939,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (PhysicsActor != null)
|
if (PhysicsActor != null)
|
||||||
{
|
{
|
||||||
m_scene.PhysicsScene.RemoveAvatar(PhysicsActor);
|
lock (m_scene.SyncRoot)
|
||||||
m_physicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients;
|
{
|
||||||
m_physicsActor.UnSubscribeEvents();
|
m_physicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients;
|
||||||
m_physicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate;
|
m_scene.PhysicsScene.RemoveAvatar(PhysicsActor);
|
||||||
PhysicsActor = null;
|
m_physicsActor.UnSubscribeEvents();
|
||||||
|
m_physicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate;
|
||||||
|
PhysicsActor = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3192,25 +3195,30 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void AddToPhysicalScene(bool isFlying)
|
public void AddToPhysicalScene(bool isFlying)
|
||||||
{
|
{
|
||||||
PhysicsScene scene = m_scene.PhysicsScene;
|
lock (m_scene.SyncRoot)
|
||||||
|
|
||||||
PhysicsVector pVec =
|
|
||||||
new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y,
|
|
||||||
AbsolutePosition.Z);
|
|
||||||
|
|
||||||
if (m_avHeight == 127.0f)
|
|
||||||
{
|
{
|
||||||
m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, 1.56f), isFlying);
|
PhysicsScene scene = m_scene.PhysicsScene;
|
||||||
|
|
||||||
|
PhysicsVector pVec =
|
||||||
|
new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y,
|
||||||
|
AbsolutePosition.Z);
|
||||||
|
|
||||||
|
if (m_avHeight == 127.0f)
|
||||||
|
{
|
||||||
|
m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, 1.56f),
|
||||||
|
isFlying);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec,
|
||||||
|
new PhysicsVector(0, 0, m_avHeight), isFlying);
|
||||||
|
}
|
||||||
|
scene.AddPhysicsActorTaint(m_physicsActor);
|
||||||
|
//m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients;
|
||||||
|
m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate;
|
||||||
|
m_physicsActor.SubscribeEvents(1000);
|
||||||
|
m_physicsActor.LocalID = LocalId;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, m_avHeight), isFlying);
|
|
||||||
}
|
|
||||||
scene.AddPhysicsActorTaint(m_physicsActor);
|
|
||||||
//m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients;
|
|
||||||
m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate;
|
|
||||||
m_physicsActor.SubscribeEvents(1000);
|
|
||||||
m_physicsActor.LocalID = LocalId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Event called by the physics plugin to tell the avatar about a collision.
|
// Event called by the physics plugin to tell the avatar about a collision.
|
||||||
|
|
|
@ -137,6 +137,14 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
if (PhysicsVector.isFinite(pos))
|
if (PhysicsVector.isFinite(pos))
|
||||||
{
|
{
|
||||||
|
if (pos.Z > 9999999)
|
||||||
|
{
|
||||||
|
pos.Z = parent_scene.GetTerrainHeightAtXY(127, 127) + 5;
|
||||||
|
}
|
||||||
|
if (pos.Z < -90000)
|
||||||
|
{
|
||||||
|
pos.Z = parent_scene.GetTerrainHeightAtXY(127, 127) + 5;
|
||||||
|
}
|
||||||
_position = pos;
|
_position = pos;
|
||||||
m_taintPosition.X = pos.X;
|
m_taintPosition.X = pos.X;
|
||||||
m_taintPosition.Y = pos.Y;
|
m_taintPosition.Y = pos.Y;
|
||||||
|
@ -396,6 +404,15 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
if (PhysicsVector.isFinite(value))
|
if (PhysicsVector.isFinite(value))
|
||||||
{
|
{
|
||||||
|
if (value.Z > 9999999)
|
||||||
|
{
|
||||||
|
value.Z = _parent_scene.GetTerrainHeightAtXY(127, 127) + 5;
|
||||||
|
}
|
||||||
|
if (value.Z < -90000)
|
||||||
|
{
|
||||||
|
value.Z = _parent_scene.GetTerrainHeightAtXY(127, 127) + 5;
|
||||||
|
}
|
||||||
|
|
||||||
_position.X = value.X;
|
_position.X = value.X;
|
||||||
_position.Y = value.Y;
|
_position.Y = value.Y;
|
||||||
_position.Z = value.Z;
|
_position.Z = value.Z;
|
||||||
|
@ -780,6 +797,41 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
//PidStatus = true;
|
//PidStatus = true;
|
||||||
|
|
||||||
|
d.Vector3 localpos = d.BodyGetPosition(Body);
|
||||||
|
PhysicsVector localPos = new PhysicsVector(localpos.X, localpos.Y, localpos.Z);
|
||||||
|
if (!PhysicsVector.isFinite(localPos))
|
||||||
|
{
|
||||||
|
|
||||||
|
m_log.Warn("[PHYSICS]: Avatar Position is non-finite!");
|
||||||
|
_parent_scene.RemoveCharacter(this);
|
||||||
|
// destroy avatar capsule and related ODE data
|
||||||
|
if (Amotor != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
// Kill the Amotor
|
||||||
|
d.JointDestroy(Amotor);
|
||||||
|
Amotor = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
//kill the Geometry
|
||||||
|
_parent_scene.waitForSpaceUnlock(_parent_scene.space);
|
||||||
|
|
||||||
|
if (Body != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
//kill the body
|
||||||
|
d.BodyDestroy(Body);
|
||||||
|
|
||||||
|
Body = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Shell != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
d.GeomDestroy(Shell);
|
||||||
|
_parent_scene.geom_name_map.Remove(Shell);
|
||||||
|
Shell = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
PhysicsVector vec = new PhysicsVector();
|
PhysicsVector vec = new PhysicsVector();
|
||||||
d.Vector3 vel = d.BodyGetLinearVel(Body);
|
d.Vector3 vel = d.BodyGetLinearVel(Body);
|
||||||
float movementdivisor = 1f;
|
float movementdivisor = 1f;
|
||||||
|
@ -901,6 +953,34 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Warn("[PHYSICS]: Got a NaN force vector in Move()");
|
m_log.Warn("[PHYSICS]: Got a NaN force vector in Move()");
|
||||||
|
m_log.Warn("[PHYSICS]: Avatar Position is non-finite!");
|
||||||
|
_parent_scene.RemoveCharacter(this);
|
||||||
|
// destroy avatar capsule and related ODE data
|
||||||
|
if (Amotor != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
// Kill the Amotor
|
||||||
|
d.JointDestroy(Amotor);
|
||||||
|
Amotor = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
//kill the Geometry
|
||||||
|
_parent_scene.waitForSpaceUnlock(_parent_scene.space);
|
||||||
|
|
||||||
|
if (Body != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
//kill the body
|
||||||
|
d.BodyDestroy(Body);
|
||||||
|
|
||||||
|
Body = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Shell != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
d.GeomDestroy(Shell);
|
||||||
|
_parent_scene.geom_name_map.Remove(Shell);
|
||||||
|
Shell = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1044,21 +1124,30 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
_parent_scene.RemoveCharacter(this);
|
_parent_scene.RemoveCharacter(this);
|
||||||
// destroy avatar capsule and related ODE data
|
// destroy avatar capsule and related ODE data
|
||||||
|
if (Amotor != IntPtr.Zero)
|
||||||
// Kill the Amotor
|
{
|
||||||
d.JointDestroy(Amotor);
|
// Kill the Amotor
|
||||||
Amotor = IntPtr.Zero;
|
d.JointDestroy(Amotor);
|
||||||
|
Amotor = IntPtr.Zero;
|
||||||
|
}
|
||||||
//kill the Geometry
|
//kill the Geometry
|
||||||
_parent_scene.waitForSpaceUnlock(_parent_scene.space);
|
_parent_scene.waitForSpaceUnlock(_parent_scene.space);
|
||||||
|
|
||||||
d.GeomDestroy(Shell);
|
if (Body != IntPtr.Zero)
|
||||||
_parent_scene.geom_name_map.Remove(Shell);
|
{
|
||||||
Shell = IntPtr.Zero;
|
//kill the body
|
||||||
|
d.BodyDestroy(Body);
|
||||||
|
|
||||||
|
Body = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Shell != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
d.GeomDestroy(Shell);
|
||||||
|
_parent_scene.geom_name_map.Remove(Shell);
|
||||||
|
Shell = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
//kill the body
|
|
||||||
d.BodyDestroy(Body);
|
|
||||||
Body=IntPtr.Zero;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_isPhysical = m_tainted_isPhysical;
|
m_isPhysical = m_tainted_isPhysical;
|
||||||
|
|
|
@ -131,6 +131,9 @@ namespace OpenSim.Region.UserStatistics
|
||||||
}
|
}
|
||||||
|
|
||||||
m_scene.Add(scene);
|
m_scene.Add(scene);
|
||||||
|
if (m_simstatsCounters.ContainsKey(scene.RegionInfo.RegionID))
|
||||||
|
m_simstatsCounters.Remove(scene.RegionInfo.RegionID);
|
||||||
|
|
||||||
m_simstatsCounters.Add(scene.RegionInfo.RegionID, new USimStatsData(scene.RegionInfo.RegionID));
|
m_simstatsCounters.Add(scene.RegionInfo.RegionID, new USimStatsData(scene.RegionInfo.RegionID));
|
||||||
scene.StatsReporter.OnSendStatsResult += ReceiveClassicSimStatsPacket;
|
scene.StatsReporter.OnSendStatsResult += ReceiveClassicSimStatsPacket;
|
||||||
}
|
}
|
||||||
|
@ -293,6 +296,10 @@ namespace OpenSim.Region.UserStatistics
|
||||||
}
|
}
|
||||||
dbConn.Close();
|
dbConn.Close();
|
||||||
dbConn.Dispose();
|
dbConn.Dispose();
|
||||||
|
m_sessions.Clear();
|
||||||
|
m_scene.Clear();
|
||||||
|
reports.Clear();
|
||||||
|
m_simstatsCounters.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual string Name
|
public virtual string Name
|
||||||
|
|
Loading…
Reference in New Issue