SL-11360 Viewer floods the server with GroupProfileRequest
parent
67fff109f8
commit
85fb2b81d8
|
|
@ -258,6 +258,8 @@ Beansy Twine
|
|||
Benja Kepler
|
||||
VWR-746
|
||||
Benjamin Bigdipper
|
||||
Beq Janus
|
||||
BUG-227094
|
||||
Beth Walcher
|
||||
Bezilon Kasei
|
||||
Biancaluce Robbiani
|
||||
|
|
|
|||
|
|
@ -1120,6 +1120,15 @@ void LLGroupMgr::processGroupPropertiesReply(LLMessageSystem* msg, void** data)
|
|||
group_datap->mGroupPropertiesDataComplete = true;
|
||||
group_datap->mChanged = TRUE;
|
||||
|
||||
properties_request_map_t::iterator request = LLGroupMgr::getInstance()->mPropRequests.find(group_id);
|
||||
if (request != LLGroupMgr::getInstance()->mPropRequests.end())
|
||||
{
|
||||
LLGroupMgr::getInstance()->mPropRequests.erase(request);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << "GroupPropertyResponse received with no pending request. Response was slow." << LL_ENDL;
|
||||
}
|
||||
LLGroupMgr::getInstance()->notifyObservers(GC_PROPERTIES);
|
||||
}
|
||||
|
||||
|
|
@ -1489,6 +1498,28 @@ LLGroupMgrGroupData* LLGroupMgr::createGroupData(const LLUUID& id)
|
|||
return group_datap;
|
||||
}
|
||||
|
||||
bool LLGroupMgr::hasPendingPropertyRequest(const LLUUID & id)
|
||||
{
|
||||
properties_request_map_t::iterator existing_req = LLGroupMgr::getInstance()->mPropRequests.find(id);
|
||||
if (existing_req != LLGroupMgr::getInstance()->mPropRequests.end())
|
||||
{
|
||||
if (gFrameTime - existing_req->second < MIN_GROUP_PROPERTY_REQUEST_FREQ)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLGroupMgr::getInstance()->mPropRequests.erase(existing_req);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLGroupMgr::addPendingPropertyRequest(const LLUUID& id)
|
||||
{
|
||||
LLGroupMgr::getInstance()->mPropRequests[id] = gFrameTime;
|
||||
}
|
||||
|
||||
void LLGroupMgr::notifyObservers(LLGroupChange gc)
|
||||
{
|
||||
for (group_map_t::iterator gi = mGroups.begin(); gi != mGroups.end(); ++gi)
|
||||
|
|
@ -1570,7 +1601,14 @@ void LLGroupMgr::sendGroupPropertiesRequest(const LLUUID& group_id)
|
|||
LL_DEBUGS() << "LLGroupMgr::sendGroupPropertiesRequest" << LL_ENDL;
|
||||
// This will happen when we get the reply
|
||||
//LLGroupMgrGroupData* group_datap = createGroupData(group_id);
|
||||
|
||||
|
||||
if (LLGroupMgr::getInstance()->hasPendingPropertyRequest(group_id))
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendGroupPropertiesRequest suppressed repeat for " << group_id << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
LLGroupMgr::getInstance()->addPendingPropertyRequest(group_id);
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessage("GroupProfileRequest");
|
||||
msg->nextBlock("AgentData");
|
||||
|
|
|
|||
|
|
@ -448,6 +448,8 @@ private:
|
|||
void notifyObserver(const LLUUID& group_id, LLGroupChange gc);
|
||||
void addGroup(LLGroupMgrGroupData* group_datap);
|
||||
LLGroupMgrGroupData* createGroupData(const LLUUID &id);
|
||||
bool hasPendingPropertyRequest(const LLUUID& id);
|
||||
void addPendingPropertyRequest(const LLUUID& id);
|
||||
|
||||
typedef std::multimap<LLUUID,LLGroupMgrObserver*> observer_multimap_t;
|
||||
observer_multimap_t mObservers;
|
||||
|
|
@ -455,6 +457,10 @@ private:
|
|||
typedef std::map<LLUUID, LLGroupMgrGroupData*> group_map_t;
|
||||
group_map_t mGroups;
|
||||
|
||||
const U64MicrosecondsImplicit MIN_GROUP_PROPERTY_REQUEST_FREQ = 100000;//100ms between requests should be enough to avoid spamming.
|
||||
typedef std::map<LLUUID, U64MicrosecondsImplicit> properties_request_map_t;
|
||||
properties_request_map_t mPropRequests;
|
||||
|
||||
typedef std::set<LLParticularGroupObserver*> observer_set_t;
|
||||
typedef std::map<LLUUID,observer_set_t> observer_map_t;
|
||||
observer_map_t mParticularObservers;
|
||||
|
|
|
|||
Loading…
Reference in New Issue