summaryrefslogtreecommitdiff
path: root/indra/llcommon/threadpool.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llcommon/threadpool.cpp')
-rw-r--r--indra/llcommon/threadpool.cpp43
1 files changed, 26 insertions, 17 deletions
diff --git a/indra/llcommon/threadpool.cpp b/indra/llcommon/threadpool.cpp
index e8daf549ef..f49dd40a8b 100644
--- a/indra/llcommon/threadpool.cpp
+++ b/indra/llcommon/threadpool.cpp
@@ -93,27 +93,36 @@ void LL::ThreadPool::run()
//static
size_t LL::ThreadPool::getConfiguredWidth(const std::string& name, size_t dft)
{
- LLSD poolSizes{ LL::CommonControl::get("Global", "ThreadPoolSizes") };
- // "ThreadPoolSizes" is actually a map containing the sizes of interest --
- // or should be, if this process has an "LLViewerControl" LLEventAPI
- // instance and its settings include "ThreadPoolSizes". If we failed to
- // retrieve it, perhaps we're in a program that doesn't define that, or
- // perhaps there's no such setting, or perhaps we're asking too early,
- // before the LLEventAPI itself has been instantiated. In any of those
- // cases, it seems worth warning.
- if (! poolSizes.isDefined())
+ LLSD poolSizes;
+ try
{
- // Note: we don't warn about absence of an override key for a
- // particular ThreadPool name, that's fine. This warning is about
- // complete absence of a ThreadPoolSizes setting, which we expect in a
- // normal viewer session.
- LL_WARNS("ThreadPool") << "No 'ThreadPoolSizes' setting for ThreadPool '"
- << name << "'" << LL_ENDL;
+ poolSizes = LL::CommonControl::get("Global", "ThreadPoolSizes");
+ // "ThreadPoolSizes" is actually a map containing the sizes of
+ // interest -- or should be, if this process has an
+ // LLViewerControlListener instance and its settings include
+ // "ThreadPoolSizes". If we failed to retrieve it, perhaps we're in a
+ // program that doesn't define that, or perhaps there's no such
+ // setting, or perhaps we're asking too early, before the LLEventAPI
+ // itself has been instantiated. In any of those cases, it seems worth
+ // warning.
+ if (! poolSizes.isDefined())
+ {
+ // Note: we don't warn about absence of an override key for a
+ // particular ThreadPool name, that's fine. This warning is about
+ // complete absence of a ThreadPoolSizes setting, which we expect
+ // in a normal viewer session.
+ LL_WARNS("ThreadPool") << "No 'ThreadPoolSizes' setting for ThreadPool '"
+ << name << "'" << LL_ENDL;
+ }
}
- else
+ catch (const LL::CommonControl::Error& exc)
{
- LL_DEBUGS("ThreadPool") << "ThreadPoolSizes = " << poolSizes << LL_ENDL;
+ // We don't want ThreadPool to *require* LLViewerControlListener.
+ // Just log it and carry on.
+ LL_WARNS("ThreadPool") << "Can't check 'ThreadPoolSizes': " << exc.what() << LL_ENDL;
}
+
+ LL_DEBUGS("ThreadPool") << "ThreadPoolSizes = " << poolSizes << LL_ENDL;
// LLSD treats an undefined value as an empty map when asked to retrieve a
// key, so we don't need this to be conditional.
LLSD sizeSpec{ poolSizes[name] };