Sanity checks, bugfixes, crashfixes, and misc tweaks snagged from snowglobe.
This commit is contained in:
@@ -53,7 +53,13 @@ LLAgentLanguage::LLAgentLanguage()
|
||||
bool LLAgentLanguage::update()
|
||||
{
|
||||
LLSD body;
|
||||
std::string url = gAgent.getRegion()->getCapability("UpdateAgentLanguage");
|
||||
std::string url;
|
||||
|
||||
if (gAgent.getRegion())
|
||||
{
|
||||
url = gAgent.getRegion()->getCapability("UpdateAgentLanguage");
|
||||
}
|
||||
|
||||
if (!url.empty())
|
||||
{
|
||||
std::string language = LLUI::getLanguage();
|
||||
|
||||
@@ -129,6 +129,7 @@ void LLAssetUploadResponder::error(U32 statusNum, const std::string& reason)
|
||||
break;
|
||||
}
|
||||
LLUploadDialog::modalUploadFinished();
|
||||
LLFilePicker::instance().reset(); // unlock file picker when bulk upload fails
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
||||
@@ -328,16 +328,7 @@ void LLCloudLayer::setRegion(LLViewerRegion *regionp)
|
||||
|
||||
void LLCloudLayer::destroy()
|
||||
{
|
||||
// Kill all of the existing puffs
|
||||
S32 i, j;
|
||||
|
||||
for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
|
||||
{
|
||||
for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
|
||||
{
|
||||
mCloudGroups[i][j].cleanup();
|
||||
}
|
||||
}
|
||||
reset();
|
||||
|
||||
delete [] mDensityp;
|
||||
mDensityp = NULL;
|
||||
@@ -347,8 +338,17 @@ void LLCloudLayer::destroy()
|
||||
|
||||
void LLCloudLayer::reset()
|
||||
{
|
||||
}
|
||||
// Kill all of the existing puffs
|
||||
S32 i, j;
|
||||
|
||||
for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
|
||||
{
|
||||
for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
|
||||
{
|
||||
mCloudGroups[i][j].cleanup();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLCloudLayer::setWindPointer(LLWind *windp)
|
||||
{
|
||||
|
||||
@@ -193,6 +193,9 @@ BOOL LLColorSwatchCtrl::handleMouseUp(S32 x, S32 y, MASK mask)
|
||||
llassert(getEnabled());
|
||||
llassert(getVisible());
|
||||
|
||||
// Focus the widget now in order to return the focus
|
||||
// after the color picker is closed.
|
||||
setFocus(TRUE);
|
||||
showPicker(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,9 +115,12 @@ void LLDrawPoolTree::render(S32 pass)
|
||||
iter != mDrawFace.end(); iter++)
|
||||
{
|
||||
LLFace *face = *iter;
|
||||
face->mVertexBuffer->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK);
|
||||
face->mVertexBuffer->drawRange(LLRender::TRIANGLES, 0, face->mVertexBuffer->getRequestedVerts()-1, face->mVertexBuffer->getRequestedIndices(), 0);
|
||||
gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices()/3);
|
||||
if(face->mVertexBuffer.notNull())
|
||||
{
|
||||
face->mVertexBuffer->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK);
|
||||
face->mVertexBuffer->drawRange(LLRender::TRIANGLES, 0, face->mVertexBuffer->getRequestedVerts()-1, face->mVertexBuffer->getRequestedIndices(), 0);
|
||||
gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -846,7 +846,8 @@ void LLGroupMgr::clearGroupData(const LLUUID& group_id)
|
||||
|
||||
void LLGroupMgr::addObserver(LLGroupMgrObserver* observer)
|
||||
{
|
||||
mObservers.insert(std::pair<LLUUID, LLGroupMgrObserver*>(observer->getID(), observer));
|
||||
if( observer->getID() != LLUUID::null )
|
||||
mObservers.insert(std::pair<LLUUID, LLGroupMgrObserver*>(observer->getID(), observer));
|
||||
}
|
||||
|
||||
void LLGroupMgr::removeObserver(LLGroupMgrObserver* observer)
|
||||
@@ -1193,8 +1194,8 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!rd) llwarns << "Received role data for unkown role " << role_id << " in group " << group_id << llendl;
|
||||
if (!md) llwarns << "Received role data for unkown member " << member_id << " in group " << group_id << llendl;
|
||||
if (!rd) llwarns << "Received role data for unknown role " << role_id << " in group " << group_id << llendl;
|
||||
if (!md) llwarns << "Received role data for unknown member " << member_id << " in group " << group_id << llendl;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1402,11 +1403,17 @@ void LLGroupMgr::notifyObservers(LLGroupChange gc)
|
||||
{
|
||||
for (group_map_t::iterator gi = mGroups.begin(); gi != mGroups.end(); ++gi)
|
||||
{
|
||||
LLUUID group_id = gi->first;
|
||||
if (gi->second->mChanged)
|
||||
{
|
||||
// notify LLGroupMgrObserver
|
||||
// Copy the map because observers may remove themselves on update
|
||||
observer_multimap_t observers = mObservers;
|
||||
|
||||
// find all observers for this group id
|
||||
observer_multimap_t::iterator oi = mObservers.find(gi->first);
|
||||
for (; oi != mObservers.end(); ++oi)
|
||||
observer_multimap_t::iterator oi = observers.lower_bound(group_id);
|
||||
observer_multimap_t::iterator end = observers.upper_bound(group_id);
|
||||
for (; oi != end; ++oi)
|
||||
{
|
||||
oi->second->changed(gc);
|
||||
}
|
||||
@@ -1751,11 +1758,13 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
|
||||
for (std::vector<LLUUID>::iterator it = member_ids.begin();
|
||||
it != member_ids.end(); ++it)
|
||||
{
|
||||
LLUUID& ejected_member_id = (*it);
|
||||
|
||||
// Can't use 'eject' to leave a group.
|
||||
if ((*it) == gAgent.getID()) continue;
|
||||
if (ejected_member_id == gAgent.getID()) continue;
|
||||
|
||||
// Make sure they are in the group, and we need the member data
|
||||
LLGroupMgrGroupData::member_list_t::iterator mit = group_datap->mMembers.find(*it);
|
||||
LLGroupMgrGroupData::member_list_t::iterator mit = group_datap->mMembers.find(ejected_member_id);
|
||||
if (mit != group_datap->mMembers.end())
|
||||
{
|
||||
// Add them to the message
|
||||
@@ -1771,7 +1780,7 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
|
||||
}
|
||||
|
||||
msg->nextBlock("EjectData");
|
||||
msg->addUUID("EjecteeID",(*it));
|
||||
msg->addUUID("EjecteeID",ejected_member_id);
|
||||
|
||||
if (msg->isSendFull())
|
||||
{
|
||||
@@ -1779,17 +1788,23 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
|
||||
start_message = true;
|
||||
}
|
||||
|
||||
LLGroupMemberData* member_data = (*mit).second;
|
||||
|
||||
// Clean up groupmgr
|
||||
for (LLGroupMemberData::role_list_t::iterator rit = (*mit).second->roleBegin();
|
||||
rit != (*mit).second->roleEnd(); ++rit)
|
||||
for (LLGroupMemberData::role_list_t::iterator rit = member_data->roleBegin();
|
||||
rit != member_data->roleEnd(); ++rit)
|
||||
{
|
||||
if ((*rit).first.notNull())
|
||||
if ((*rit).first.notNull() && (*rit).second!=0)
|
||||
{
|
||||
(*rit).second->removeMember(*it);
|
||||
(*rit).second->removeMember(ejected_member_id);
|
||||
}
|
||||
}
|
||||
delete (*mit).second;
|
||||
group_datap->mMembers.erase(*it);
|
||||
|
||||
group_datap->mMembers.erase(ejected_member_id);
|
||||
|
||||
// member_data was introduced and is used here instead of (*mit).second to avoid crash because of invalid iterator
|
||||
// It becomes invalid after line with erase above. EXT-4778
|
||||
delete member_data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user