If the viewer has already rezzed any attachments itself, then ignore the simulator-side rez attachments call.

This is a further effort to reduce v3 viewer race conditions where this call may clash with the viewer signalling attachment wearing from its current outfit folder.
user_profiles
Justin Clark-Casey (justincc) 2013-03-28 22:51:59 +00:00
parent 3b377f16b2
commit 4ad9b27530
3 changed files with 19 additions and 11 deletions

View File

@ -182,10 +182,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
}
}
/// <summary>
/// RezAttachments. This should only be called upon login on the first region.
/// Attachment rezzings on crossings and TPs are done in a different way.
/// </summary>
public void RezAttachments(IScenePresence sp)
{
if (!Enabled)
@ -194,9 +190,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
if (null == sp.Appearance)
{
m_log.WarnFormat("[ATTACHMENTS MODULE]: Appearance has not been initialized for agent {0}", sp.UUID);
return;
}
if (sp.GetAttachments().Count > 0)
{
// m_log.DebugFormat(
// "[ATTACHMENTS MODULE]: Not doing simulator-side attachment rez for {0} in {1} as their viewer has already rezzed attachments",
// m_scene.Name, sp.Name);
return;
}
// m_log.DebugFormat("[ATTACHMENTS MODULE]: Rezzing any attachments for {0} from simulator-side", sp.Name);
List<AvatarAttachment> attachments = sp.Appearance.GetAttachments();

View File

@ -53,6 +53,10 @@ namespace OpenSim.Region.Framework.Interfaces
/// RezAttachments. This should only be called upon login on the first region.
/// Attachment rezzings on crossings and TPs are done in a different way.
/// </summary>
/// <remarks>
/// This is only actually necessary for viewers which do not have a current outfit folder (these viewers make
/// their own attachment calls on login) and agents which have attachments but no viewer (e.g. NPCs).
/// </remarks>
/// <param name="sp"></param>
void RezAttachments(IScenePresence sp);

View File

@ -953,13 +953,11 @@ namespace OpenSim.Region.Framework.Scenes
// haven't started yet.
if (PresenceType == PresenceType.Npc || (TeleportFlags & TeleportFlags.ViaLogin) != 0)
{
// We leave a 5 second pause before attempting to rez attachments to avoid a clash with
// version 3 viewers that maybe doing their own attachment rezzing related to their current
// outfit folder on startup. If these operations do clash, then the symptoms are invisible
// attachments until one zooms in on the avatar.
//
// We do not pause if we are launching on the same thread anyway in order to avoid pointlessly
// delaying any attachment related regression tests.
// Viewers which have a current outfit folder will actually rez their own attachments. However,
// viewers without (e.g. v1 viewers) will not, so we still need to make this call.
//
// However, we leave a 5 second pause to try and avoid a clash with viewers that are rezzing
// attachments themselves. This should then mean that this call ends up doing nothing.
if (Scene.AttachmentsModule != null)
Util.FireAndForget(
o =>