FIRE-11330: More changes to prevent names getting stuck if both name request via caps or legacy fail
Previous version could lead to a situation where a name request fails both via caps or legacy, or it will return broken data, with both cases leading to a callback connection waiting in the callback map and not issuing new requests for the same name. With the change, we might request names multiple times again, but handle the callback only once (first one wins) and disconnect all others waiting, since callObservers() will make sure all interested parties get notified about the received name.
parent
93bfdfd839
commit
5711dc8fad
|
|
@ -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
|
||||
//
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat gets stuck as "Loading..."
|
||||
// <FS:Ansariel> 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)
|
||||
{
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat gets stuck as "Loading..."
|
||||
// <FS:Ansariel> 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<avatar_name_cache_connection_map_t::iterator, avatar_name_cache_connection_map_t::iterator> 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);
|
||||
// </FS:Ansariel>
|
||||
|
||||
std::string label = av_name.getCompleteName();
|
||||
|
|
@ -543,17 +544,14 @@ std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCa
|
|||
}
|
||||
else
|
||||
{
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat gets stuck as "Loading..."
|
||||
// <FS:Ansariel> 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<LLUUID, boost::signals2::connection>(agent_id, connection));
|
||||
// </FS:Ansariel>
|
||||
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)
|
||||
//
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat gets stuck as "Loading..."
|
||||
// <FS:Ansariel> 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)
|
||||
{
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat gets stuck as "Loading..."
|
||||
// <FS:Ansariel> 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<avatar_name_cache_connection_map_t::iterator, avatar_name_cache_connection_map_t::iterator> 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);
|
||||
// </FS:Ansariel>
|
||||
|
||||
std::string label = getName(av_name);
|
||||
|
|
@ -671,17 +670,14 @@ std::string LLUrlEntryAgentName::getLabel(const std::string &url, const LLUrlLab
|
|||
}
|
||||
else
|
||||
{
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat gets stuck as "Loading..."
|
||||
// <FS:Ansariel> 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<LLUUID, boost::signals2::connection>(agent_id, connection));
|
||||
// </FS:Ansariel>
|
||||
addObserver(agent_id_string, url, cb);
|
||||
return LLTrans::getString("AvatarNameWaiting");
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ public:
|
|||
LLUrlEntryAgent();
|
||||
~LLUrlEntryAgent()
|
||||
{
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat gets stuck as "Loading..."
|
||||
// <FS:Ansariel> 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:
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat gets stuck as "Loading..."
|
||||
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat get stuck as "Loading..."
|
||||
//boost::signals2::connection mAvatarNameCacheConnection;
|
||||
typedef std::map<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t;
|
||||
typedef std::multimap<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t;
|
||||
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
|
||||
// </FS:Ansariel>
|
||||
};
|
||||
|
|
@ -238,7 +238,7 @@ public:
|
|||
LLUrlEntryAgentName();
|
||||
~LLUrlEntryAgentName()
|
||||
{
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat gets stuck as "Loading..."
|
||||
// <FS:Ansariel> 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:
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat gets stuck as "Loading..."
|
||||
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
|
||||
// <FS:Ansariel> FIRE-11330: Names in chat get stuck as "Loading..."
|
||||
//boost::signals2::connection mAvatarNameCacheConnection;
|
||||
typedef std::map<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t;
|
||||
typedef std::multimap<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t;
|
||||
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
|
||||
// </FS:Ansariel>
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue