SL-18721 Viewer shutdown order changes

Same thing as commit cf692c40b0
which was removed due to shutdown freezes.
Error thread is no longer there so doesn't cause any race sonditions,
was not able to repro any issues so will ask QA to test shutdown
meow-7.2.2
Andrey Kleshchev 2023-08-11 23:36:37 +03:00
parent 858cde02f7
commit edf0874e06
3 changed files with 14 additions and 4 deletions

View File

@ -21,11 +21,12 @@
#include "llevents.h"
#include "stringize.h"
LL::ThreadPool::ThreadPool(const std::string& name, size_t threads, size_t capacity):
LL::ThreadPool::ThreadPool(const std::string& name, size_t threads, size_t capacity, bool auto_shutdown):
super(name),
mQueue(name, capacity),
mName("ThreadPool:" + name),
mThreadCount(threads)
mThreadCount(threads),
mAutomaticShutdown(auto_shutdown)
{}
void LL::ThreadPool::start()
@ -39,6 +40,13 @@ void LL::ThreadPool::start()
run(tname);
});
}
// Some threads might need to run longer than LLEventPumps
if (!mAutomaticShutdown)
{
return;
}
// Listen on "LLApp", and when the app is shutting down, close the queue
// and join the workers.
LLEventPumps::instance().obtain("LLApp").listen(

View File

@ -31,7 +31,7 @@ namespace LL
* Pass ThreadPool a string name. This can be used to look up the
* relevant WorkQueue.
*/
ThreadPool(const std::string& name, size_t threads=1, size_t capacity=1024);
ThreadPool(const std::string& name, size_t threads=1, size_t capacity=1024, bool auto_shutdown = true);
virtual ~ThreadPool();
/**
@ -66,6 +66,7 @@ namespace LL
std::string mName;
size_t mThreadCount;
std::vector<std::pair<std::string, std::thread>> mThreads;
bool mAutomaticShutdown;
};
} // namespace LL

View File

@ -828,6 +828,7 @@ void LLWindowWin32::close()
// Is window is already closed?
if (!mWindowHandle)
{
mWindowThread->close();
return;
}
@ -4590,7 +4591,7 @@ std::vector<std::string> LLWindowWin32::getDynamicFallbackFontList()
#endif // LL_WINDOWS
inline LLWindowWin32::LLWindowWin32Thread::LLWindowWin32Thread()
: ThreadPool("Window Thread", 1, MAX_QUEUE_SIZE)
: ThreadPool("Window Thread", 1, MAX_QUEUE_SIZE, false)
{
ThreadPool::start();
}