diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index d69729a7db..ef082deac2 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -410,7 +410,7 @@ std::string LLUrlEntrySeconlifeURL::getUrl(const std::string &string) const // secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about // x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about // -// FIRE-11330: Names in chat gets stuck as "Loading..." +// FIRE-11330: Names in chat get stuck as "Loading..." //LLUrlEntryAgent::LLUrlEntryAgent() : // mAvatarNameCacheConnection() LLUrlEntryAgent::LLUrlEntryAgent() @@ -445,17 +445,18 @@ void LLUrlEntryAgent::callObservers(const std::string &id, void LLUrlEntryAgent::onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name) { - // FIRE-11330: Names in chat gets stuck as "Loading..." + // FIRE-11330: Names in chat get stuck as "Loading..." //mAvatarNameCacheConnection.disconnect(); - avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(id); - if (it != mAvatarNameCacheConnections.end()) + std::pair range; + range = mAvatarNameCacheConnections.equal_range(id); + for (avatar_name_cache_connection_map_t::iterator it = range.first; it != range.second; ++it) { if (it->second.connected()) { it->second.disconnect(); } - mAvatarNameCacheConnections.erase(it); } + mAvatarNameCacheConnections.erase(range.first, range.second); // std::string label = av_name.getCompleteName(); @@ -543,17 +544,14 @@ std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCa } else { - // FIRE-11330: Names in chat gets stuck as "Loading..." + // FIRE-11330: Names in chat get stuck as "Loading..." //if (mAvatarNameCacheConnection.connected()) //{ // mAvatarNameCacheConnection.disconnect(); //} //mAvatarNameCacheConnection = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgent::onAvatarNameCache, this, _1, _2)); - avatar_name_cache_connection_map_t::iterator found = mAvatarNameCacheConnections.find(agent_id); - if (found == mAvatarNameCacheConnections.end()) - { - mAvatarNameCacheConnections[agent_id] = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgent::onAvatarNameCache, this, _1, _2)); - } + boost::signals2::connection connection = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgent::onAvatarNameCache, this, _1, _2)); + mAvatarNameCacheConnections.insert(std::pair(agent_id, connection)); // addObserver(agent_id_string, url, cb); return LLTrans::getString("AvatarNameWaiting"); @@ -615,7 +613,7 @@ std::string LLUrlEntryAgent::getIcon(const std::string &url) // secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/(completename|displayname|username) // x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/(completename|displayname|username) // -// FIRE-11330: Names in chat gets stuck as "Loading..." +// FIRE-11330: Names in chat get stuck as "Loading..." //LLUrlEntryAgentName::LLUrlEntryAgentName() : // mAvatarNameCacheConnection() LLUrlEntryAgentName::LLUrlEntryAgentName() @@ -625,17 +623,18 @@ LLUrlEntryAgentName::LLUrlEntryAgentName() void LLUrlEntryAgentName::onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name) { - // FIRE-11330: Names in chat gets stuck as "Loading..." + // FIRE-11330: Names in chat get stuck as "Loading..." //mAvatarNameCacheConnection.disconnect(); - avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(id); - if (it != mAvatarNameCacheConnections.end()) + std::pair range; + range = mAvatarNameCacheConnections.equal_range(id); + for (avatar_name_cache_connection_map_t::iterator it = range.first; it != range.second; ++it) { if (it->second.connected()) { it->second.disconnect(); } - mAvatarNameCacheConnections.erase(it); } + mAvatarNameCacheConnections.erase(range.first, range.second); // std::string label = getName(av_name); @@ -671,17 +670,14 @@ std::string LLUrlEntryAgentName::getLabel(const std::string &url, const LLUrlLab } else { - // FIRE-11330: Names in chat gets stuck as "Loading..." + // FIRE-11330: Names in chat get stuck as "Loading..." //if (mAvatarNameCacheConnection.connected()) //{ // mAvatarNameCacheConnection.disconnect(); //} //mAvatarNameCacheConnection = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgentName::onAvatarNameCache, this, _1, _2)); - avatar_name_cache_connection_map_t::iterator found = mAvatarNameCacheConnections.find(agent_id); - if (found == mAvatarNameCacheConnections.end()) - { - mAvatarNameCacheConnections[agent_id] = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgentName::onAvatarNameCache, this, _1, _2)); - } + boost::signals2::connection connection = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgentName::onAvatarNameCache, this, _1, _2)); + mAvatarNameCacheConnections.insert(std::pair(agent_id, connection)); // addObserver(agent_id_string, url, cb); return LLTrans::getString("AvatarNameWaiting"); diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index 86197e6563..c5fdd2af1a 100755 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -195,7 +195,7 @@ public: LLUrlEntryAgent(); ~LLUrlEntryAgent() { - // FIRE-11330: Names in chat gets stuck as "Loading..." + // FIRE-11330: Names in chat get stuck as "Loading..." //if (mAvatarNameCacheConnection.connected()) //{ // mAvatarNameCacheConnection.disconnect(); @@ -219,10 +219,10 @@ public: protected: /*virtual*/ void callObservers(const std::string &id, const std::string &label, const std::string& icon); private: - // FIRE-11330: Names in chat gets stuck as "Loading..." void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name); + // FIRE-11330: Names in chat get stuck as "Loading..." //boost::signals2::connection mAvatarNameCacheConnection; - typedef std::map avatar_name_cache_connection_map_t; + typedef std::multimap avatar_name_cache_connection_map_t; avatar_name_cache_connection_map_t mAvatarNameCacheConnections; // }; @@ -238,7 +238,7 @@ public: LLUrlEntryAgentName(); ~LLUrlEntryAgentName() { - // FIRE-11330: Names in chat gets stuck as "Loading..." + // FIRE-11330: Names in chat get stuck as "Loading..." //if (mAvatarNameCacheConnection.connected()) //{ // mAvatarNameCacheConnection.disconnect(); @@ -259,10 +259,10 @@ protected: // override this to pull out relevant name fields virtual std::string getName(const LLAvatarName& avatar_name) = 0; private: - // FIRE-11330: Names in chat gets stuck as "Loading..." void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name); + // FIRE-11330: Names in chat get stuck as "Loading..." //boost::signals2::connection mAvatarNameCacheConnection; - typedef std::map avatar_name_cache_connection_map_t; + typedef std::multimap avatar_name_cache_connection_map_t; avatar_name_cache_connection_map_t mAvatarNameCacheConnections; // };