summaryrefslogtreecommitdiff
path: root/indra/llcommon/threadpool.cpp
diff options
context:
space:
mode:
authorAndrey Lihatskiy <alihatskiy@productengine.com>2024-04-12 15:43:34 +0300
committerAndrey Lihatskiy <alihatskiy@productengine.com>2024-04-12 15:43:34 +0300
commiteab5beb54cacc2b0dc2cddad4a78634e7468a298 (patch)
tree51f17910f529af57819bcd77f1a7dd9e92f6291e /indra/llcommon/threadpool.cpp
parent00e09ddcad8ec2c33ecbcdd0da09bd7819bc3509 (diff)
parentcc8fdf341dbbe6ab940d7b24bcf81cbed252cb69 (diff)
Merge branch 'main' into marchcat/x-merge
# Conflicts: # indra/llimage/llimageworker.cpp # indra/llimage/llimageworker.h # indra/newview/llcontrolavatar.cpp # indra/newview/llfloaterprofiletexture.cpp # indra/newview/lloutfitslist.cpp # indra/newview/lloutfitslist.h # indra/newview/lltexturefetch.cpp
Diffstat (limited to 'indra/llcommon/threadpool.cpp')
-rw-r--r--indra/llcommon/threadpool.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/indra/llcommon/threadpool.cpp b/indra/llcommon/threadpool.cpp
index 3a9a5a2062..c48989358e 100644
--- a/indra/llcommon/threadpool.cpp
+++ b/indra/llcommon/threadpool.cpp
@@ -60,12 +60,15 @@ struct sleepy_robin: public boost::fibers::algo::round_robin
/*****************************************************************************
* ThreadPoolBase
*****************************************************************************/
-LL::ThreadPoolBase::ThreadPoolBase(const std::string& name, size_t threads,
- WorkQueueBase* queue):
+LL::ThreadPoolBase::ThreadPoolBase(const std::string& name,
+ size_t threads,
+ WorkQueueBase* queue,
+ bool auto_shutdown):
super(name),
mName("ThreadPool:" + name),
mThreadCount(getConfiguredWidth(name, threads)),
- mQueue(queue)
+ mQueue(queue),
+ mAutomaticShutdown(auto_shutdown)
{}
void LL::ThreadPoolBase::start()
@@ -79,6 +82,14 @@ void LL::ThreadPoolBase::start()
run(tname);
});
}
+
+ if (!mAutomaticShutdown)
+ {
+ // Some threads, like main window's might need to run a bit longer
+ // to wait for a proper shutdown message
+ return;
+ }
+
// Listen on "LLApp", and when the app is shutting down, close the queue
// and join the workers.
LLEventPumps::instance().obtain("LLApp").listen(
@@ -109,8 +120,11 @@ void LL::ThreadPoolBase::close()
mQueue->close();
for (auto& pair: mThreads)
{
- LL_DEBUGS("ThreadPool") << mName << " waiting on thread " << pair.first << LL_ENDL;
- pair.second.join();
+ if (pair.second.joinable())
+ {
+ LL_DEBUGS("ThreadPool") << mName << " waiting on thread " << pair.first << LL_ENDL;
+ pair.second.join();
+ }
}
LL_DEBUGS("ThreadPool") << mName << " shutdown complete" << LL_ENDL;
}