diff options
Diffstat (limited to 'indra/llmessage')
| -rw-r--r-- | indra/llmessage/llavatarnamecache.cpp | 58 | ||||
| -rw-r--r-- | indra/llmessage/llavatarnamecache.h | 4 | ||||
| -rw-r--r-- | indra/llmessage/llcurl.cpp | 5 | ||||
| -rw-r--r-- | indra/llmessage/llhttpassetstorage.cpp | 2 | 
4 files changed, 30 insertions, 39 deletions
| diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 32d9d8bfc3..700525e1fa 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -334,8 +334,9 @@ void LLAvatarNameCache::requestNamesViaCapability()  	// http://pdp60.lindenlab.com:8000/agents/?ids=3941037e-78ab-45f0-b421-bd6e77c1804d&ids=0012809d-7d2d-4c24-9609-af1230a37715&ids=0019aaba-24af-4f0a-aa72-6457953cf7f0  	//  	// Apache can handle URLs of 4096 chars, but let's be conservative -	const U32 NAME_URL_MAX = 4096; -	const U32 NAME_URL_SEND_THRESHOLD = 3000; +	static const U32 NAME_URL_MAX = 4096; +	static const U32 NAME_URL_SEND_THRESHOLD = 3500; +  	std::string url;  	url.reserve(NAME_URL_MAX); @@ -343,10 +344,12 @@ void LLAvatarNameCache::requestNamesViaCapability()  	agent_ids.reserve(128);  	U32 ids = 0; -	ask_queue_t::const_iterator it = sAskQueue.begin(); -	for ( ; it != sAskQueue.end(); ++it) +	ask_queue_t::const_iterator it; +	while(!sAskQueue.empty())  	{ +		it = sAskQueue.begin();  		const LLUUID& agent_id = *it; +		sAskQueue.erase(it);  		if (url.empty())  		{ @@ -369,27 +372,17 @@ void LLAvatarNameCache::requestNamesViaCapability()  		if (url.size() > NAME_URL_SEND_THRESHOLD)  		{ -			LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::requestNamesViaCapability first " -									 << ids << " ids" -									 << LL_ENDL; -			LLHTTPClient::get(url, new LLAvatarNameResponder(agent_ids)); -			url.clear(); -			agent_ids.clear(); +			break;  		}  	}  	if (!url.empty())  	{ -		LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::requestNamesViaCapability all " +		LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::requestNamesViaCapability requested "  								 << ids << " ids"  								 << LL_ENDL;  		LLHTTPClient::get(url, new LLAvatarNameResponder(agent_ids)); -		url.clear(); -		agent_ids.clear();  	} - -	// We've moved all asks to the pending request queue -	sAskQueue.clear();  }  void LLAvatarNameCache::legacyNameCallback(const LLUUID& agent_id, @@ -416,12 +409,15 @@ void LLAvatarNameCache::legacyNameCallback(const LLUUID& agent_id,  void LLAvatarNameCache::requestNamesViaLegacy()  { +	static const S32 MAX_REQUESTS = 100;  	F64 now = LLFrameTimer::getTotalSeconds();  	std::string full_name; -	ask_queue_t::const_iterator it = sAskQueue.begin(); -	for (; it != sAskQueue.end(); ++it) +	ask_queue_t::const_iterator it; +	for (S32 requests = 0; !sAskQueue.empty() && requests < MAX_REQUESTS; ++requests)  	{ +		it = sAskQueue.begin();  		const LLUUID& agent_id = *it; +		sAskQueue.erase(it);  		// Mark as pending first, just in case the callback is immediately  		// invoked below.  This should never happen in practice. @@ -433,10 +429,6 @@ void LLAvatarNameCache::requestNamesViaLegacy()  			boost::bind(&LLAvatarNameCache::legacyNameCallback,  				_1, _2, _3));  	} - -	// We've either answered immediately or moved all asks to the -	// pending queue -	sAskQueue.clear();  }  void LLAvatarNameCache::initClass(bool running) @@ -513,11 +505,11 @@ void LLAvatarNameCache::idle()  	// *TODO: Possibly re-enabled this based on People API load measurements  	// 100 ms is the threshold for "user speed" operations, so we can  	// stall for about that long to batch up requests. -	//const F32 SECS_BETWEEN_REQUESTS = 0.1f; -	//if (!sRequestTimer.checkExpirationAndReset(SECS_BETWEEN_REQUESTS)) -	//{ -	//	return; -	//} +	const F32 SECS_BETWEEN_REQUESTS = 0.1f; +	if (!sRequestTimer.hasExpired()) +	{ +		return; +	}  	if (!sAskQueue.empty())  	{ @@ -532,6 +524,12 @@ void LLAvatarNameCache::idle()          }  	} +	if (sAskQueue.empty()) +	{ +		// cleared the list, reset the request timer. +		sRequestTimer.resetWithExpiry(SECS_BETWEEN_REQUESTS); +	} +      // erase anything that has not been refreshed for more than MAX_UNREFRESHED_TIME      eraseUnrefreshed();  } @@ -743,12 +741,6 @@ void LLAvatarNameCache::erase(const LLUUID& agent_id)  	sCache.erase(agent_id);  } -void LLAvatarNameCache::fetch(const LLUUID& agent_id) -{ -	// re-request, even if request is already pending -	sAskQueue.insert(agent_id); -} -  void LLAvatarNameCache::insert(const LLUUID& agent_id, const LLAvatarName& av_name)  {  	// *TODO: update timestamp if zero? diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index 064942fe53..79f170f7c8 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -86,10 +86,6 @@ namespace LLAvatarNameCache      /// Provide some fallback for agents that return errors  	void handleAgentError(const LLUUID& agent_id); -	// Force a re-fetch of the most recent data, but keep the current -	// data in cache -	void fetch(const LLUUID& agent_id); -  	void insert(const LLUUID& agent_id, const LLAvatarName& av_name);  	// Compute name expiration time from HTTP Cache-Control header, diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 0d01dd0e3e..8ffa8e4271 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -294,6 +294,8 @@ LLCurl::Easy* LLCurl::Easy::getEasy()  	// multi handles cache if they are added to one.  	CURLcode result = curl_easy_setopt(easy->mCurlEasyHandle, CURLOPT_DNS_CACHE_TIMEOUT, 0);  	check_curl_code(result); +	result = curl_easy_setopt(easy->mCurlEasyHandle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); +	check_curl_code(result);  	++gCurlEasyCount;  	return easy; @@ -482,7 +484,8 @@ void LLCurl::Easy::prepRequest(const std::string& url,  	//setopt(CURLOPT_VERBOSE, 1); // useful for debugging  	setopt(CURLOPT_NOSIGNAL, 1); - +	setopt(CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); +	  	// Set the CURL options for either Socks or HTTP proxy  	LLProxy::getInstance()->applyProxySettings(this); diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp index 612d765969..d6ed08055e 100644 --- a/indra/llmessage/llhttpassetstorage.cpp +++ b/indra/llmessage/llhttpassetstorage.cpp @@ -749,7 +749,7 @@ LLAssetRequest* LLHTTPAssetStorage::findNextRequest(LLAssetStorage::request_list  	request_list_t::iterator pending_iter = pending.begin();  	request_list_t::iterator pending_end  = pending.end();  	// Loop over all pending requests until we miss finding it in the running list. -	for (; pending_iter != pending.end(); ++pending_iter) +	for (; pending_iter != pending_end; ++pending_iter)  	{  		LLAssetRequest* req = *pending_iter;  		// Look for this pending request in the running list. | 
