summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorMonty Brandenberg <monty@lindenlab.com>2012-07-19 13:41:18 -0400
committerMonty Brandenberg <monty@lindenlab.com>2012-07-19 13:41:18 -0400
commit3f032e33f2b2f929b229cf4d358b9c9d297856b8 (patch)
treed09d11e70b12c42721f51baedf8af3e795d3f8da /indra/newview
parentc9f5bc7cae793b6965ceb9490243b4c52017c254 (diff)
SH-3280 Better init/shutdown functionality for llcorehttp by llappviewer
Isolate llcorehttp initialization into a utility class (LLAppCoreHttp) that provides glue between app and library (sets up policies, handles notifications). Introduce 'TextureFetchConcurrency' debug setting to provide some field control when absolutely necessary.
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llappcorehttp.cpp186
-rw-r--r--indra/newview/llappcorehttp.h86
-rw-r--r--indra/newview/llappviewer.cpp189
-rw-r--r--indra/newview/llappviewer.h7
-rwxr-xr-xindra/newview/lltexturefetch.cpp9
-rw-r--r--indra/newview/lltexturefetch.h12
8 files changed, 310 insertions, 192 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index ab81cadc96..94286f0ff4 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -91,6 +91,7 @@ set(viewer_SOURCE_FILES
llagentwearables.cpp
llagentwearablesfetch.cpp
llanimstatelabels.cpp
+ llappcorehttp.cpp
llappearancemgr.cpp
llappviewer.cpp
llappviewerlistener.cpp
@@ -648,6 +649,7 @@ set(viewer_HEADER_FILES
llagentwearables.h
llagentwearablesfetch.h
llanimstatelabels.h
+ llappcorehttp.h
llappearance.h
llappearancemgr.h
llappviewer.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c9b4de0140..fc32e65410 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -10743,6 +10743,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>TextureFetchConcurrency</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum number of HTTP connections used for texture fetches</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>TextureFetchDebuggerEnabled</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llappcorehttp.cpp b/indra/newview/llappcorehttp.cpp
new file mode 100644
index 0000000000..e89c8d5ac2
--- /dev/null
+++ b/indra/newview/llappcorehttp.cpp
@@ -0,0 +1,186 @@
+/**
+ * @file llappcorehttp.cpp
+ * @brief
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llappcorehttp.h"
+
+#include "llviewercontrol.h"
+
+
+const F64 LLAppCoreHttp::MAX_THREAD_WAIT_TIME(10.0);
+
+LLAppCoreHttp::LLAppCoreHttp()
+ : mRequest(NULL),
+ mStopHandle(LLCORE_HTTP_HANDLE_INVALID),
+ mStopRequested(0.0),
+ mStopped(false),
+ mPolicyDefault(-1)
+{}
+
+
+LLAppCoreHttp::~LLAppCoreHttp()
+{
+ delete mRequest;
+ mRequest = NULL;
+}
+
+
+void LLAppCoreHttp::init()
+{
+ LLCore::HttpStatus status = LLCore::HttpRequest::createService();
+ if (! status)
+ {
+ LL_ERRS("Init") << "Failed to initialize HTTP services. Reason: "
+ << status.toString()
+ << LL_ENDL;
+ }
+
+ // Point to our certs or SSH/https: will fail on connect
+ status = LLCore::HttpRequest::setPolicyGlobalOption(LLCore::HttpRequest::GP_CA_FILE,
+ gDirUtilp->getCAFile());
+ if (! status)
+ {
+ LL_ERRS("Init") << "Failed to set CA File for HTTP services. Reason: "
+ << status.toString()
+ << LL_ENDL;
+ }
+
+ // Establish HTTP Proxy. "LLProxy" is a special string which directs
+ // the code to use LLProxy::applyProxySettings() to establish any
+ // HTTP or SOCKS proxy for http operations.
+ status = LLCore::HttpRequest::setPolicyGlobalOption(LLCore::HttpRequest::GP_LLPROXY, 1);
+ if (! status)
+ {
+ LL_ERRS("Init") << "Failed to set HTTP proxy for HTTP services. Reason: "
+ << status.toString()
+ << LL_ENDL;
+ }
+
+ // Tracing levels for library & libcurl (note that 2 & 3 are beyond spammy):
+ // 0 - None
+ // 1 - Basic start, stop simple transitions
+ // 2 - libcurl CURLOPT_VERBOSE mode with brief lines
+ // 3 - with partial data content
+ status = LLCore::HttpRequest::setPolicyGlobalOption(LLCore::HttpRequest::GP_TRACE, 0);
+
+ // Setup default policy and constrain if directed to
+ mPolicyDefault = LLCore::HttpRequest::DEFAULT_POLICY_ID;
+ static const std::string texture_concur("TextureFetchConcurrency");
+ if (gSavedSettings.controlExists(texture_concur))
+ {
+ U32 concur(llmin(gSavedSettings.getU32(texture_concur), U32(12)));
+
+ if (concur > 0)
+ {
+ LLCore::HttpStatus status;
+ status = LLCore::HttpRequest::setPolicyClassOption(mPolicyDefault,
+ LLCore::HttpRequest::CP_CONNECTION_LIMIT,
+ concur);
+ if (! status)
+ {
+ LL_WARNS("Init") << "Unable to set texture fetch concurrency. Reason: "
+ << status.toString()
+ << LL_ENDL;
+ }
+ else
+ {
+ LL_INFOS("Init") << "Application settings overriding default texture fetch concurrency. New value: "
+ << concur
+ << LL_ENDL;
+ }
+ }
+ }
+
+ // Kick the thread
+ status = LLCore::HttpRequest::startThread();
+ if (! status)
+ {
+ LL_ERRS("Init") << "Failed to start HTTP servicing thread. Reason: "
+ << status.toString()
+ << LL_ENDL;
+ }
+
+ mRequest = new LLCore::HttpRequest;
+}
+
+
+void LLAppCoreHttp::requestStop()
+{
+ llassert_always(mRequest);
+
+ mStopHandle = mRequest->requestStopThread(this);
+ if (LLCORE_HTTP_HANDLE_INVALID != mStopHandle)
+ {
+ mStopRequested = LLTimer::getTotalSeconds();
+ }
+}
+
+
+void LLAppCoreHttp::cleanup()
+{
+ if (LLCORE_HTTP_HANDLE_INVALID == mStopHandle)
+ {
+ // Should have been started already...
+ requestStop();
+ }
+
+ if (LLCORE_HTTP_HANDLE_INVALID == mStopHandle)
+ {
+ LL_WARNS("Cleanup") << "Attempting to cleanup HTTP services without thread shutdown"
+ << LL_ENDL;
+ }
+ else
+ {
+ while (! mStopped && LLTimer::getTotalSeconds() < (mStopRequested + MAX_THREAD_WAIT_TIME))
+ {
+ mRequest->update(200000);
+ ms_sleep(50);
+ }
+ if (! mStopped)
+ {
+ LL_WARNS("Cleanup") << "Attempting to cleanup HTTP services with thread shutdown incomplete"
+ << LL_ENDL;
+ }
+ }
+
+ delete mRequest;
+ mRequest = NULL;
+
+ LLCore::HttpStatus status = LLCore::HttpRequest::destroyService();
+ if (! status)
+ {
+ LL_WARNS("Cleanup") << "Failed to shutdown HTTP services, continuing. Reason: "
+ << status.toString()
+ << LL_ENDL;
+ }
+}
+
+
+void LLAppCoreHttp::onCompleted(LLCore::HttpHandle, LLCore::HttpResponse *)
+{
+ mStopped = true;
+}
diff --git a/indra/newview/llappcorehttp.h b/indra/newview/llappcorehttp.h
new file mode 100644
index 0000000000..241d73ad52
--- /dev/null
+++ b/indra/newview/llappcorehttp.h
@@ -0,0 +1,86 @@
+/**
+ * @file llappcorehttp.h
+ * @brief Singleton initialization/shutdown class for llcorehttp library
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef _LL_APP_COREHTTP_H_
+#define _LL_APP_COREHTTP_H_
+
+
+#include "httprequest.h"
+#include "httphandler.h"
+#include "httpresponse.h"
+
+
+// This class manages the lifecyle of the core http library.
+// Slightly different style than traditional code but reflects
+// the use of handler classes and light-weight interface
+// object instances of the new libraries. To be used
+// as a singleton and static construction is fine.
+class LLAppCoreHttp : public LLCore::HttpHandler
+{
+public:
+ LLAppCoreHttp();
+ ~LLAppCoreHttp();
+
+ // Initialize the LLCore::HTTP library creating service classes
+ // and starting the servicing thread. Caller is expected to do
+ // other initializations (SSL mutex, thread hash function) appropriate
+ // for the application.
+ void init();
+
+ // Request that the servicing thread stop servicing requests,
+ // release resource references and stop. Request is asynchronous
+ // and @see cleanup() will perform a limited wait loop for this
+ // request to stop the thread.
+ void requestStop();
+
+ // Terminate LLCore::HTTP library services. Caller is expected
+ // to have made a best-effort to shutdown the servicing thread
+ // by issuing a requestThreadStop() and waiting for completion
+ // notification that the stop has completed.
+ void cleanup();
+
+ // Notification when the stop request is complete.
+ virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response);
+
+ // Retrieve the policy class for default operations.
+ int getPolicyDefault() const
+ {
+ return mPolicyDefault;
+ }
+
+private:
+ static const F64 MAX_THREAD_WAIT_TIME;
+
+private:
+ LLCore::HttpRequest * mRequest;
+ LLCore::HttpHandle mStopHandle;
+ F64 mStopRequested;
+ bool mStopped;
+ int mPolicyDefault;
+};
+
+
+#endif // _LL_APP_COREHTTP_H_
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 0549a972e1..f8ee1a477f 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -215,10 +215,6 @@
#include "llmachineid.h"
#include "llmainlooprepeater.h"
-// LLCore::HTTP
-#include "httpcommon.h"
-#include "httprequest.h"
-#include "httphandler.h"
// *FIX: These extern globals should be cleaned up.
// The globals either represent state/config/resource-storage of either
@@ -334,53 +330,6 @@ static std::string gLaunchFileOnQuit;
// Used on Win32 for other apps to identify our window (eg, win_setup)
const char* const VIEWER_WINDOW_CLASSNAME = "Second Life";
-namespace
-{
-
-// This class manages the lifecyle of the core http library.
-// Slightly different style than traditional code but reflects
-// the use of handler classes and light-weight interface
-// object instances of the new libraries. To be used
-// as a singleton and static construction is fine.
-class CoreHttp : public LLCore::HttpHandler
-{
-public:
- CoreHttp();
- ~CoreHttp();
-
- // Initialize the LLCore::HTTP library creating service classes
- // and starting the servicing thread. Caller is expected to do
- // other initializations (SSL mutex, thread hash function) appropriate
- // for the application.
- void init();
-
- // Request that the servicing thread stop servicing requests,
- // release resource references and stop.
- void requestStop();
-
- // Terminate LLCore::HTTP library services. Caller is expected
- // to have made a best-effort to shutdown the servicing thread
- // by issuing a requestThreadStop() and waiting for completion
- // notification that the stop has completed.
- void cleanup();
-
- // Notification when the stop request is complete.
- virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response);
-
-private:
- static const F64 MAX_THREAD_WAIT_TIME;
-
-private:
- LLCore::HttpRequest * mRequest;
- LLCore::HttpHandle mStopHandle;
- F64 mStopRequested;
- bool mStopped;
-};
-
-CoreHttp coreHttpLib;
-
-} // end anonymous namespace
-
//-- LLDeferredTaskList ------------------------------------------------------
/**
@@ -775,8 +724,9 @@ bool LLAppViewer::init()
LLViewerStatsRecorder::initClass();
#endif
- // Initialize the non-LLCurl libcurl library
- coreHttpLib.init();
+ // Initialize the non-LLCurl libcurl library. Should be called
+ // before consumers (LLTextureFetch).
+ mAppCoreHttp.init();
// *NOTE:Mani - LLCurl::initClass is not thread safe.
// Called before threads are created.
@@ -1915,7 +1865,7 @@ bool LLAppViewer::cleanup()
// Delete workers first
// shotdown all worker threads before deleting them in case of co-dependencies
- coreHttpLib.requestStop();
+ mAppCoreHttp.requestStop();
sTextureFetch->shutdown();
sTextureCache->shutdown();
sImageDecodeThread->shutdown();
@@ -2000,7 +1950,7 @@ bool LLAppViewer::cleanup()
LLCurl::cleanupClass();
// Non-LLCurl libcurl library
- coreHttpLib.cleanup();
+ mAppCoreHttp.cleanup();
// If we're exiting to launch an URL, do that here so the screen
// is at the right resolution before we launch IE.
@@ -5298,132 +5248,3 @@ void LLAppViewer::metricsSend(bool enable_reporting)
gViewerAssetStatsMain->reset();
}
-namespace
-{
-
-const F64 CoreHttp::MAX_THREAD_WAIT_TIME(10.0);
-
-CoreHttp::CoreHttp()
- : mRequest(NULL),
- mStopHandle(LLCORE_HTTP_HANDLE_INVALID),
- mStopRequested(0.0),
- mStopped(false)
-{}
-
-
-CoreHttp::~CoreHttp()
-{
- delete mRequest;
- mRequest = NULL;
-}
-
-
-void CoreHttp::init()
-{
- LLCore::HttpStatus status = LLCore::HttpRequest::createService();
- if (! status)
- {
- LL_ERRS("Init") << "Failed to initialize HTTP services. Reason: "
- << status.toString()
- << LL_ENDL;
- }
-
- // Point to our certs or SSH/https: will fail on connect
- status = LLCore::HttpRequest::setPolicyGlobalOption(LLCore::HttpRequest::GP_CA_FILE,
- gDirUtilp->getCAFile());
- if (! status)
- {
- LL_ERRS("Init") << "Failed to set CA File for HTTP services. Reason: "
- << status.toString()
- << LL_ENDL;
- }
-
- // Establish HTTP Proxy. "LLProxy" is a special string which directs
- // the code to use LLProxy::applyProxySettings() to establish any
- // HTTP or SOCKS proxy for http operations.
- status = LLCore::HttpRequest::setPolicyGlobalOption(LLCore::HttpRequest::GP_LLPROXY, 1);
- if (! status)
- {
- LL_ERRS("Init") << "Failed to set HTTP proxy for HTTP services. Reason: "
- << status.toString()
- << LL_ENDL;
- }
-
- // Tracing levels for library & libcurl (note that 2 & 3 are beyond spammy):
- // 0 - None
- // 1 - Basic start, stop simple transitions
- // 2 - libcurl CURLOPT_VERBOSE mode with brief lines
- // 3 - with partial data content
- status = LLCore::HttpRequest::setPolicyGlobalOption(LLCore::HttpRequest::GP_TRACE, 0);
-
- // Kick the thread
- status = LLCore::HttpRequest::startThread();
- if (! status)
- {
- LL_ERRS("Init") << "Failed to start HTTP servicing thread. Reason: "
- << status.toString()
- << LL_ENDL;
- }
-
- mRequest = new LLCore::HttpRequest;
-}
-
-
-void CoreHttp::requestStop()
-{
- llassert_always(mRequest);
-
- mStopHandle = mRequest->requestStopThread(this);
- if (LLCORE_HTTP_HANDLE_INVALID != mStopHandle)
- {
- mStopRequested = LLTimer::getTotalSeconds();
- }
-}
-
-
-void CoreHttp::cleanup()
-{
- if (LLCORE_HTTP_HANDLE_INVALID == mStopHandle)
- {
- // Should have been started already...
- requestStop();
- }
-
- if (LLCORE_HTTP_HANDLE_INVALID == mStopHandle)
- {
- LL_WARNS("Cleanup") << "Attempting to cleanup HTTP services without thread shutdown"
- << LL_ENDL;
- }
- else
- {
- while (! mStopped && LLTimer::getTotalSeconds() < (mStopRequested + MAX_THREAD_WAIT_TIME))
- {
- mRequest->update(200000);
- ms_sleep(50);
- }
- if (! mStopped)
- {
- LL_WARNS("Cleanup") << "Attempting to cleanup HTTP services with thread shutdown incomplete"
- << LL_ENDL;
- }
- }
-
- delete mRequest;
- mRequest = NULL;
-
- LLCore::HttpStatus status = LLCore::HttpRequest::destroyService();
- if (! status)
- {
- LL_WARNS("Cleanup") << "Failed to shutdown HTTP services, continuing. Reason: "
- << status.toString()
- << LL_ENDL;
- }
-}
-
-
-void CoreHttp::onCompleted(LLCore::HttpHandle, LLCore::HttpResponse *)
-{
- mStopped = true;
-}
-
-} // end anonymous namespace
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index f7d019ccba..a694ea9fe6 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -31,6 +31,7 @@
#include "llcontrol.h"
#include "llsys.h" // for LLOSInfo
#include "lltimer.h"
+#include "llappcorehttp.h"
class LLCommandLineParser;
class LLFrameTimer;
@@ -173,6 +174,9 @@ public:
// Metrics policy helper statics.
static void metricsUpdateRegion(U64 region_handle);
static void metricsSend(bool enable_reporting);
+
+ // llcorehttp init/shutdown/config information.
+ LLAppCoreHttp & getAppCoreHttp() { return mAppCoreHttp; }
protected:
virtual bool initWindow(); // Initialize the viewer's window.
@@ -270,6 +274,9 @@ private:
boost::scoped_ptr<LLUpdaterService> mUpdater;
+ // llcorehttp library init/shutdown helper
+ LLAppCoreHttp mAppCoreHttp;
+
//---------------------------------------------
//*NOTE: Mani - legacy updater stuff
// Still useable?
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 51d57ccf68..b5586d1250 100755
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -868,7 +868,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
mMetricsStartTime(0),
mHttpHandle(LLCORE_HTTP_HANDLE_INVALID),
mHttpBufferArray(NULL),
- mHttpPolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID),
+ mHttpPolicyClass(mFetcher->mHttpPolicyClass),
mHttpActive(false),
mHttpReplySize(0U),
mHttpReplyOffset(0U),
@@ -2302,6 +2302,7 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
mHttpOptions(NULL),
mHttpHeaders(NULL),
mHttpMetricsHeaders(NULL),
+ mHttpPolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID),
mHttpSemaphore(HTTP_REQUESTS_IN_QUEUE_HIGH_WATER),
mTotalCacheReadCount(0U),
mTotalCacheWriteCount(0U),
@@ -2324,6 +2325,7 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
mHttpHeaders->mHeaders.push_back("Accept: image/x-j2c");
mHttpMetricsHeaders = new LLCore::HttpHeaders;
mHttpMetricsHeaders->mHeaders.push_back("Content-Type: application/llsd+xml");
+ mHttpPolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicyDefault();
}
LLTextureFetch::~LLTextureFetch()
@@ -3631,7 +3633,6 @@ bool
TFReqSendMetrics::doWork(LLTextureFetch * fetcher)
{
static const U32 report_priority(1);
- static const int report_policy_class(LLCore::HttpRequest::DEFAULT_POLICY_ID);
static LLCore::HttpHandler * const handler(fetcher->isQAMode() || true ? &stats_handler : NULL);
if (! gViewerAssetStatsThread1)
@@ -3671,7 +3672,7 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher)
LLCore::BufferArrayStream bas(ba);
LLSDSerialize::toXML(merged_llsd, bas);
- fetcher->getHttpRequest().requestPost(report_policy_class,
+ fetcher->getHttpRequest().requestPost(fetcher->getPolicyClass(),
report_priority,
mCapsURL,
ba,
@@ -3797,7 +3798,7 @@ LLTextureFetchDebugger::LLTextureFetchDebugger(LLTextureFetch* fetcher, LLTextur
mTextureCache(cache),
mImageDecodeThread(imagedecodethread),
mHttpHeaders(NULL),
- mHttpPolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID)
+ mHttpPolicyClass(fetcher->getPolicyClass())
{
init();
}
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index 54ffeda8df..115e471bc9 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -164,6 +164,9 @@ public:
// Threads: T*
LLCore::HttpRequest & getHttpRequest() { return *mHttpRequest; }
+ // Threads: T*
+ LLCore::HttpRequest::policy_t getPolicyClass() const { return mHttpPolicyClass; }
+
// Return a pointer to the shared metrics headers definition.
// Does not increment the reference count, caller is required
// to do that to hold a reference for any length of time.
@@ -339,10 +342,11 @@ private:
// Interfaces and objects into the core http library used
// to make our HTTP requests. These replace the various
// LLCurl interfaces used in the past.
- LLCore::HttpRequest * mHttpRequest; // Ttf
- LLCore::HttpOptions * mHttpOptions; // Ttf
- LLCore::HttpHeaders * mHttpHeaders; // Ttf
- LLCore::HttpHeaders * mHttpMetricsHeaders; // Ttf
+ LLCore::HttpRequest * mHttpRequest; // Ttf
+ LLCore::HttpOptions * mHttpOptions; // Ttf
+ LLCore::HttpHeaders * mHttpHeaders; // Ttf
+ LLCore::HttpHeaders * mHttpMetricsHeaders; // Ttf
+ LLCore::HttpRequest::policy_t mHttpPolicyClass; // T*
// We use a resource semaphore to keep HTTP requests in
// WAIT_HTTP_RESOURCE2 if there aren't sufficient slots in the