summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelgroupgeneral.cpp
diff options
context:
space:
mode:
authorKelly Washington <kelly@lindenlab.com>2012-12-03 16:37:05 -0800
committerKelly Washington <kelly@lindenlab.com>2012-12-03 16:37:05 -0800
commit5c22524f29e4ab1f287f0e443bbdbea2f516c0d2 (patch)
treef876f68a56e93cca1e349a29f9671dc88c06be55 /indra/newview/llpanelgroupgeneral.cpp
parentcca22d608deb26cf21b33629b170e70a0e221575 (diff)
MAINT-1979 Viewer crashes while attempting to join group in the moment of loading group members
* Fix one race condition that could dereference a dangling pointer. reviewed with Simon and Baker.
Diffstat (limited to 'indra/newview/llpanelgroupgeneral.cpp')
-rw-r--r--indra/newview/llpanelgroupgeneral.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 51b4d2ea65..993ffb7825 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -670,7 +670,6 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
{
mMemberProgress = gdatap->mMembers.begin();
mPendingMemberUpdate = TRUE;
- mUdpateSessionID.generate();
sSDTime = 0.0f;
sElementTime = 0.0f;
@@ -730,7 +729,7 @@ void LLPanelGroupGeneral::updateMembers()
// If name is not cached, onNameCache() should be called when it is cached and add this member to list.
LLAvatarNameCache::get(mMemberProgress->first,
boost::bind(&LLPanelGroupGeneral::onNameCache,
- this, mUdpateSessionID, member, _1, _2));
+ this, gdatap->getMemberVersion(), member, _2));
}
}
@@ -768,11 +767,15 @@ void LLPanelGroupGeneral::addMember(LLGroupMemberData* member)
}
}
-void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name)
+void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)
{
- if (!member
- || update_id != mUdpateSessionID)
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+
+ if (!gdatap
+ || !gdatap->isMemberDataComplete()
+ || gdatap->getMemberVersion() != update_id)
{
+ // Stale data
return;
}