From f37b90df5046fbe50309beada01022e35c5aa424 Mon Sep 17 00:00:00 2001
From: Monty Brandenberg <monty@lindenlab.com>
Date: Fri, 6 Jul 2012 18:09:17 -0400
Subject: [PATCH] SH-3222  Slow loading textures on Lag Me 1 Think I have found
 the major factor that causes the Linksys WRT54G V5 to fall over in testing
 scenarios:  DNS.  For some historical reason, we're trying to use libcurl
 without any DNS caching.  My implementation echoed that and implemented it
 correctly and I was seeing a DNS request per request on the wire.  The
 existing implementation tries to do that and has bugs because it is clearing
 caching DNS data querying only once every few seconds.  Once I started
 emulating the bug, comms through the WRT became much, much more reliable.

---
 indra/llcorehttp/_httpinternal.h    |  3 +++
 indra/llcorehttp/_httpoprequest.cpp | 11 +++++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/indra/llcorehttp/_httpinternal.h b/indra/llcorehttp/_httpinternal.h
index bc0bd6a2ab5..4ccace2b303 100644
--- a/indra/llcorehttp/_httpinternal.h
+++ b/indra/llcorehttp/_httpinternal.h
@@ -77,6 +77,9 @@ const int LOOP_SLEEP_NORMAL_MS = 2;
 // Block allocation size (a tuning parameter) is found
 // in bufferarray.h.
 
+// Compatibility controls
+const bool ENABLE_LINKSYS_WRT54G_V5_DNS_FIX = true;
+
 }  // end namespace LLCore
 
 #endif	// _LLCORE_HTTP_INTERNAL_H_
diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp
index 86ecee5b264..a19b6bd0dcd 100644
--- a/indra/llcorehttp/_httpoprequest.cpp
+++ b/indra/llcorehttp/_httpoprequest.cpp
@@ -385,8 +385,15 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
 	curl_easy_setopt(mCurlHandle, CURLOPT_PRIVATE, this);
 	curl_easy_setopt(mCurlHandle, CURLOPT_ENCODING, "");
 
-	// *FIXME:  Revisit this old DNS timeout setting - may no longer be valid
-	curl_easy_setopt(mCurlHandle, CURLOPT_DNS_CACHE_TIMEOUT, 0);
+	if (ENABLE_LINKSYS_WRT54G_V5_DNS_FIX)
+	{
+		curl_easy_setopt(mCurlHandle, CURLOPT_DNS_CACHE_TIMEOUT, 10);
+	}
+	else
+	{
+		// *FIXME:  Revisit this old DNS timeout setting - may no longer be valid
+		curl_easy_setopt(mCurlHandle, CURLOPT_DNS_CACHE_TIMEOUT, 0);
+	}
 	curl_easy_setopt(mCurlHandle, CURLOPT_AUTOREFERER, 1);
 	curl_easy_setopt(mCurlHandle, CURLOPT_FOLLOWLOCATION, 1);
 	curl_easy_setopt(mCurlHandle, CURLOPT_MAXREDIRS, DEFAULT_HTTP_REDIRECTS);	// *FIXME:  parameterize this later
-- 
GitLab