Prevent avatar data from being sent during login when it's not valid and

crashes login on some viewers.
avinationmerge
Melanie 2013-01-08 13:57:45 +01:00
parent 126e73c5ed
commit ef8f03b711
2 changed files with 6 additions and 2 deletions

View File

@ -2977,6 +2977,7 @@ namespace OpenSim.Region.Framework.Scenes
// start the scripts again (since this is done in RezAttachments()). // start the scripts again (since this is done in RezAttachments()).
// XXX: This is convoluted. // XXX: This is convoluted.
sp.IsChildAgent = false; sp.IsChildAgent = false;
sp.IsLoggingIn = true;
if (AttachmentsModule != null) if (AttachmentsModule != null)
Util.FireAndForget(delegate(object o) { AttachmentsModule.RezAttachments(sp); }); Util.FireAndForget(delegate(object o) { AttachmentsModule.RezAttachments(sp); });

View File

@ -607,6 +607,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
public bool IsChildAgent { get; set; } public bool IsChildAgent { get; set; }
public bool IsLoggingIn { get; set; }
/// <summary> /// <summary>
/// If the avatar is sitting, the local ID of the prim that it's sitting on. If not sitting then zero. /// If the avatar is sitting, the local ID of the prim that it's sitting on. If not sitting then zero.
@ -743,6 +744,7 @@ namespace OpenSim.Region.Framework.Scenes
AttachmentsSyncLock = new Object(); AttachmentsSyncLock = new Object();
AllowMovement = true; AllowMovement = true;
IsChildAgent = true; IsChildAgent = true;
IsLoggingIn = false;
m_sendCoarseLocationsMethod = SendCoarseLocationsDefault; m_sendCoarseLocationsMethod = SendCoarseLocationsDefault;
Animator = new ScenePresenceAnimator(this); Animator = new ScenePresenceAnimator(this);
PresenceType = type; PresenceType = type;
@ -915,6 +917,7 @@ namespace OpenSim.Region.Framework.Scenes
else else
{ {
IsChildAgent = false; IsChildAgent = false;
IsLoggingIn = false;
} }
@ -2541,13 +2544,13 @@ namespace OpenSim.Region.Framework.Scenes
// NOTE: Velocity is not the same as m_velocity. Velocity will attempt to // NOTE: Velocity is not the same as m_velocity. Velocity will attempt to
// grab the latest PhysicsActor velocity, whereas m_velocity is often // grab the latest PhysicsActor velocity, whereas m_velocity is often
// storing a requested force instead of an actual traveling velocity // storing a requested force instead of an actual traveling velocity
if (Appearance.AvatarSize != m_lastSize) if (Appearance.AvatarSize != m_lastSize && !IsLoggingIn)
{ {
m_lastSize = Appearance.AvatarSize; m_lastSize = Appearance.AvatarSize;
SendAvatarDataToAllAgents(); SendAvatarDataToAllAgents();
} }
else if (!Rotation.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) || if (!Rotation.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) ||
!Velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) || !Velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) ||
!m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE)) !m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE))
{ {