summaryrefslogtreecommitdiff
path: root/indra/llcommon/threadpool.cpp
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2022-06-09 17:04:26 -0400
committerNat Goodspeed <nat@lindenlab.com>2022-06-09 17:04:26 -0400
commit64209ddeeafd944f82da6f13a6e790f9b542b3ff (patch)
tree2fbbd95bc513209be558b2e92aee0a9058a1bee4 /indra/llcommon/threadpool.cpp
parent1e28b8d992e6f24f85fde5c86bf9824bf7c7d277 (diff)
SL-17483: Add integration test for CommonControl
and for LLViewerControlListener, to which it talks. Fix glitches detected by the tests.
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] };