Reorder clearing of upate schedule on SOP to before sending updates. Fix potential race condition.

iar_mods
Dan Lake 2011-12-13 21:37:17 -08:00
parent b242ceda1e
commit 39736e52d8
1 changed files with 3 additions and 11 deletions

View File

@ -259,8 +259,6 @@ namespace OpenSim.Region.Framework.Scenes
private bool m_passTouches; private bool m_passTouches;
private UpdateRequired m_updateFlag;
private PhysicsActor m_physActor; private PhysicsActor m_physActor;
protected Vector3 m_acceleration; protected Vector3 m_acceleration;
protected Vector3 m_angularVelocity; protected Vector3 m_angularVelocity;
@ -1004,11 +1002,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
public UpdateRequired UpdateFlag public UpdateRequired UpdateFlag { get; set; }
{
get { return m_updateFlag; }
set { m_updateFlag = value; }
}
/// <summary> /// <summary>
/// Used for media on a prim. /// Used for media on a prim.
@ -2949,6 +2943,7 @@ namespace OpenSim.Region.Framework.Scenes
{ {
case UpdateRequired.TERSE: case UpdateRequired.TERSE:
{ {
ClearUpdateSchedule();
// Throw away duplicate or insignificant updates // Throw away duplicate or insignificant updates
if (!RotationOffset.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) || if (!RotationOffset.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) ||
!Acceleration.Equals(m_lastAcceleration) || !Acceleration.Equals(m_lastAcceleration) ||
@ -2958,9 +2953,7 @@ namespace OpenSim.Region.Framework.Scenes
!OffsetPosition.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || !OffsetPosition.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) ||
Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE) Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE)
{ {
SendTerseUpdateToAllClients(); SendTerseUpdateToAllClients();
ClearUpdateSchedule();
// Update the "last" values // Update the "last" values
m_lastPosition = OffsetPosition; m_lastPosition = OffsetPosition;
@ -2974,12 +2967,11 @@ namespace OpenSim.Region.Framework.Scenes
} }
case UpdateRequired.FULL: case UpdateRequired.FULL:
{ {
ClearUpdateSchedule();
SendFullUpdateToAllClients(); SendFullUpdateToAllClients();
break; break;
} }
} }
ClearUpdateSchedule();
} }
/// <summary> /// <summary>