Properly disconnect name cache callbacks in area search
parent
93d9e680eb
commit
65cb6880c3
|
|
@ -193,6 +193,15 @@ FSAreaSearch::~FSAreaSearch()
|
|||
mRlvBehaviorCallbackConnection.disconnect();
|
||||
}
|
||||
|
||||
for (const auto& cb : mNameCacheConnections)
|
||||
{
|
||||
if (cb.second.connected())
|
||||
{
|
||||
cb.second.disconnect();
|
||||
}
|
||||
}
|
||||
mNameCacheConnections.clear();
|
||||
|
||||
if (mParcelChangedObserver)
|
||||
{
|
||||
LLViewerParcelMgr::getInstance()->removeObserver(mParcelChangedObserver);
|
||||
|
|
@ -1138,7 +1147,8 @@ void FSAreaSearch::getNameFromUUID(const LLUUID& id, bool needs_rlva_check, std:
|
|||
if (std::find(mNamesRequested.begin(), mNamesRequested.end(), id) == mNamesRequested.end())
|
||||
{
|
||||
mNamesRequested.push_back(id);
|
||||
gCacheName->get(id, group, boost::bind(&FSAreaSearch::callbackLoadFullName, this, _1, _2));
|
||||
boost::signals2::connection cb_connection = gCacheName->get(id, group, boost::bind(&FSAreaSearch::callbackLoadFullName, this, _1, _2));
|
||||
mNameCacheConnections.insert(std::make_pair(id, cb_connection)); // mNamesRequested will do the dupe check
|
||||
}
|
||||
name_requested = true;
|
||||
}
|
||||
|
|
@ -1163,7 +1173,8 @@ void FSAreaSearch::getNameFromUUID(const LLUUID& id, bool needs_rlva_check, std:
|
|||
if (std::find(mNamesRequested.begin(), mNamesRequested.end(), id) == mNamesRequested.end())
|
||||
{
|
||||
mNamesRequested.push_back(id);
|
||||
LLAvatarNameCache::get(id, boost::bind(&FSAreaSearch::avatarNameCacheCallback, this, _1, _2, needs_rlva_check));
|
||||
boost::signals2::connection cb_connection = LLAvatarNameCache::get(id, boost::bind(&FSAreaSearch::avatarNameCacheCallback, this, _1, _2, needs_rlva_check));
|
||||
mNameCacheConnections.insert(std::make_pair(id, cb_connection)); // mNamesRequested will do the dupe check
|
||||
}
|
||||
name_requested = true;
|
||||
}
|
||||
|
|
@ -1186,13 +1197,23 @@ void FSAreaSearch::avatarNameCacheCallback(const LLUUID& id, const LLAvatarName&
|
|||
|
||||
void FSAreaSearch::callbackLoadFullName(const LLUUID& id, const std::string& full_name)
|
||||
{
|
||||
auto iter = mNameCacheConnections.find(id);
|
||||
if (iter != mNameCacheConnections.end())
|
||||
{
|
||||
if (iter->second.connected())
|
||||
{
|
||||
iter->second.disconnect();
|
||||
}
|
||||
mNameCacheConnections.erase(iter);
|
||||
}
|
||||
|
||||
LLViewerRegion* our_region = gAgent.getRegion();
|
||||
|
||||
for (auto& entry : mObjectDetails)
|
||||
{
|
||||
if (entry.second.name_requested && !entry.second.listed)
|
||||
{
|
||||
LLUUID object_id = entry.second.id;
|
||||
const LLUUID& object_id = entry.second.id;
|
||||
LLViewerObject* objectp = gObjectList.findObject(object_id);
|
||||
if (objectp && isSearchableObject(objectp, our_region))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -210,6 +210,9 @@ private:
|
|||
|
||||
uuid_vec_t mNamesRequested;
|
||||
|
||||
typedef std::map<LLUUID, boost::signals2::connection> name_cache_connection_map_t;
|
||||
name_cache_connection_map_t mNameCacheConnections;
|
||||
|
||||
LLViewerRegion* mLastRegion;
|
||||
|
||||
class FSParcelChangeObserver;
|
||||
|
|
|
|||
Loading…
Reference in New Issue