summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsimon <none@none>2013-04-25 14:14:35 -0700
committersimon <none@none>2013-04-25 14:14:35 -0700
commit6e483af1f6b7a6f8d0f83e54d79a941607760f7b (patch)
tree7e9673f54b1aed046d7b3cc6596877fd966e715e
parentc4a45fca396bea8abf8362b15b5cf0f85e57ad6b (diff)
Revert ares and libcurl version update that was causing problems, revise curl
handle duplication code. Reviewed by Kelly
-rw-r--r--autobuild.xml24
-rw-r--r--indra/llcorehttp/_httpinternal.h3
-rw-r--r--indra/llcorehttp/_httpoprequest.cpp13
-rw-r--r--indra/llcorehttp/_httpoprequest.h3
-rw-r--r--indra/llmessage/llcurl.cpp58
-rw-r--r--indra/llmessage/llcurl.h11
6 files changed, 57 insertions, 55 deletions
diff --git a/autobuild.xml b/autobuild.xml
index f6f23f6c1c..3aa097bfab 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -138,9 +138,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>4dd93da518dc00319cadac43dce2676b</string>
+ <string>e6caaeea16131e1f2343ecd7765e3147</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/239515/arch/Darwin/installer/ares-1.7.5-darwin-20110825.tar.bz2</string>
+ <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20110217.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -150,9 +150,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>c223c0df8ebdab02a5bd785c21459875</string>
+ <string>0745872db83d45f4ab3bdc697d98e264</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/239515/arch/Linux/installer/ares-1.7.5-linux-20110825.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/223275/arch/Linux/installer/ares-1.7.1-linux-20110310.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -162,9 +162,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>a0a002359e44a9c68f897b45217abf7e</string>
+ <string>1dcec6babd249a2597114d4ac226c461</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/239515/arch/CYGWIN/installer/ares-1.7.5-windows-20110825.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/220963/arch/CYGWIN/installer/ares-1.7.1-windows-20110211.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -282,9 +282,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>6f6b4fc6268e7935e82e694ed3f5912a</string>
+ <string>aaea644191807f51051cefa2fac11069</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/249347/arch/Darwin/installer/curl-7.24.0-darwin-20120213.tar.bz2</string>
+ <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-darwin-20110316.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -294,9 +294,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>384e6d46f2f4228117cda7eea396df06</string>
+ <string>2d9377951d99a1aa4735cea8d4b5aa71</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/263749/arch/Linux/installer/curl-7.24.0-linux-20120820.tar.bz2</string>
+ <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-linux-20110316.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -306,9 +306,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>56c72a3b4d6faab81a4d66a630a67c83</string>
+ <string>fea96aa2a7d513397317194f3d6c979b</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/249347/arch/CYGWIN/installer/curl-7.24.0-windows-20120213.tar.bz2</string>
+ <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-windows-20110211.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
diff --git a/indra/llcorehttp/_httpinternal.h b/indra/llcorehttp/_httpinternal.h
index 14f744a9f1..008e4fd95c 100644
--- a/indra/llcorehttp/_httpinternal.h
+++ b/indra/llcorehttp/_httpinternal.h
@@ -146,9 +146,6 @@ const int HTTP_SERVICE_LOOP_SLEEP_NORMAL_MS = 2;
// Block allocation size (a tuning parameter) is found
// in bufferarray.h.
-// Compatibility controls
-const bool HTTP_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 469ce75434..89dcd334f4 100644
--- a/indra/llcorehttp/_httpoprequest.cpp
+++ b/indra/llcorehttp/_httpoprequest.cpp
@@ -380,18 +380,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
// Get policy options
HttpPolicyGlobal & policy(service->getPolicy().getGlobalOptions());
- mCurlHandle = LLCurlHandleHandler::getInstance()->CreateCurlHandle();
-
- if (HTTP_ENABLE_LINKSYS_WRT54G_V5_DNS_FIX)
- {
- // The Linksys WRT54G V5 router has an issue with frequent
- // DNS lookups from LAN machines. If they happen too often,
- // like for every HTTP request, the router gets annoyed after
- // about 700 or so requests and starts issuing TCP RSTs to
- // new connections. Reuse the DNS lookups for even a few
- // seconds and no RSTs.
- curl_easy_setopt(mCurlHandle, CURLOPT_DNS_CACHE_TIMEOUT, 15);
- }
+ mCurlHandle = LLCurl::createStandardCurlHandle();
curl_easy_setopt(mCurlHandle, CURLOPT_WRITEFUNCTION, writeCallback);
curl_easy_setopt(mCurlHandle, CURLOPT_READFUNCTION, readCallback);
diff --git a/indra/llcorehttp/_httpoprequest.h b/indra/llcorehttp/_httpoprequest.h
index e819f74079..74a349b0bf 100644
--- a/indra/llcorehttp/_httpoprequest.h
+++ b/indra/llcorehttp/_httpoprequest.h
@@ -29,7 +29,6 @@
#include "linden_common.h" // Modifies curl/curl.h interfaces
-#include "llsingleton.h"
#include <string>
#include <curl/curl.h>
@@ -66,8 +65,6 @@ class HttpOpRequest : public HttpOperation
public:
HttpOpRequest();
- friend class CurlHandleHandler;
-
protected:
virtual ~HttpOpRequest(); // Use release()
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
index c02483ccf5..081f070866 100644
--- a/indra/llmessage/llcurl.cpp
+++ b/indra/llmessage/llcurl.cpp
@@ -92,6 +92,7 @@ S32 LLCurl::sTotalHandles = 0 ;
bool LLCurl::sNotQuitting = true;
F32 LLCurl::sCurlRequestTimeOut = 120.f; //seonds
S32 LLCurl::sMaxHandles = 256; //max number of handles, (multi handles and easy handles combined).
+CURL* LLCurl::sCurlTemplateStandardHandle = NULL;
void check_curl_code(CURLcode code)
{
@@ -1815,7 +1816,7 @@ CURL* LLCurl::newEasyHandle()
}
sTotalHandles++;
- CURL* ret = LLCurlHandleHandler::getInstance()->CreateCurlHandle();
+ CURL* ret = createStandardCurlHandle();
if(!ret)
{
llwarns << "failed to create curl handle." << llendl ;
@@ -1849,23 +1850,46 @@ void LLCurlFF::check_multi_code(CURLMcode code)
check_curl_multi_code(code);
}
-CURL* LLCurlHandleHandler::the_one_true_curl_handle;
-LLCurlHandleHandler::LLCurlHandleHandler()
+// Static
+CURL* LLCurl::createStandardCurlHandle()
{
- the_one_true_curl_handle = curl_easy_init();
- curl_easy_setopt(the_one_true_curl_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
- curl_easy_setopt(the_one_true_curl_handle, CURLOPT_NOSIGNAL, 1);
- curl_easy_setopt(the_one_true_curl_handle, CURLOPT_NOPROGRESS, 1);
- curl_easy_setopt(the_one_true_curl_handle, CURLOPT_ENCODING, "");
- curl_easy_setopt(the_one_true_curl_handle, CURLOPT_AUTOREFERER, 1);
- curl_easy_setopt(the_one_true_curl_handle, CURLOPT_FOLLOWLOCATION, 1);
- curl_easy_setopt(the_one_true_curl_handle, CURLOPT_SSL_VERIFYPEER, 1);
- curl_easy_setopt(the_one_true_curl_handle, CURLOPT_SSL_VERIFYHOST, 0);
- curl_easy_setopt(the_one_true_curl_handle, CURLOPT_DNS_CACHE_TIMEOUT, 0);
-}
+ if (sCurlTemplateStandardHandle == NULL)
+ { // Late creation of the template curl handle
+ sCurlTemplateStandardHandle = curl_easy_init();
+ if (sCurlTemplateStandardHandle == NULL)
+ {
+ llwarns << "curl error calling curl_easy_init()" << llendl;
+ }
+ else
+ {
+ CURLcode result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
+ check_curl_code(result);
+ result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_NOSIGNAL, 1);
+ check_curl_code(result);
+ result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_NOPROGRESS, 1);
+ check_curl_code(result);
+ result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_ENCODING, "");
+ check_curl_code(result);
+ result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_AUTOREFERER, 1);
+ check_curl_code(result);
+ result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_FOLLOWLOCATION, 1);
+ check_curl_code(result);
+ result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_SSL_VERIFYPEER, 1);
+ check_curl_code(result);
+ result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_SSL_VERIFYHOST, 0);
+ check_curl_code(result);
+
+ // The Linksys WRT54G V5 router has an issue with frequent
+ // DNS lookups from LAN machines. If they happen too often,
+ // like for every HTTP request, the router gets annoyed after
+ // about 700 or so requests and starts issuing TCP RSTs to
+ // new connections. Reuse the DNS lookups for even a few
+ // seconds and no RSTs.
+ result = curl_easy_setopt(sCurlTemplateStandardHandle, CURLOPT_DNS_CACHE_TIMEOUT, 15);
+ check_curl_code(result);
+ }
+ }
-CURL* LLCurlHandleHandler::CreateCurlHandle()
-{
- return curl_easy_duphandle(the_one_true_curl_handle);
+ return curl_easy_duphandle(sCurlTemplateStandardHandle);
}
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
index a03333157c..90b3f2815d 100644
--- a/indra/llmessage/llcurl.h
+++ b/indra/llmessage/llcurl.h
@@ -53,14 +53,6 @@ class LLCurlThread;
// For whatever reason, this is not typedef'd in curl.h
typedef size_t (*curl_header_callback)(void *ptr, size_t size, size_t nmemb, void *stream);
-class LLCurlHandleHandler : public LLSingleton<LLCurlHandleHandler>
-{
-public:
- static CURL* the_one_true_curl_handle;
- LLCurlHandleHandler();
- static CURL* CreateCurlHandle();
-};
-
class LLCurl
{
LOG_CLASS(LLCurl);
@@ -196,6 +188,8 @@ public:
static CURL* newEasyHandle() ;
static void deleteEasyHandle(CURL* handle) ;
+ static CURL* createStandardCurlHandle();
+
private:
static std::string sCAPath;
static std::string sCAFile;
@@ -205,6 +199,7 @@ private:
static LLMutex* sHandleMutexp ;
static S32 sTotalHandles ;
static S32 sMaxHandles;
+ static CURL* sCurlTemplateStandardHandle;
public:
static bool sNotQuitting;
static F32 sCurlRequestTimeOut;