You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-02 17:22:27 +03:00
MCOL-1810 Fix hang on low core count
Anything that links against joblist will spin up a threadpool upon startup. This includes the tools setConfig/getConfig. It is possible on a low core count machine or low CPU speed that the signal to the prune thread to shutdown is sent before the thread has completed startup when these quick-running tools are used. This fix adds a mutex so that spin up and shutdown can't happen at the same time as well as a stop watch in case we are shutting down when either the thread is running or we haven't fully started.
This commit is contained in:
@ -55,6 +55,7 @@ ThreadPool::~ThreadPool() throw()
|
||||
{
|
||||
try
|
||||
{
|
||||
boost::mutex::scoped_lock initLock(fInitMutex);
|
||||
stop();
|
||||
}
|
||||
catch (...)
|
||||
@ -64,6 +65,7 @@ ThreadPool::~ThreadPool() throw()
|
||||
|
||||
void ThreadPool::init()
|
||||
{
|
||||
boost::mutex::scoped_lock initLock(fInitMutex);
|
||||
fThreadCount = 0;
|
||||
fGeneralErrors = 0;
|
||||
fFunctorErrors = 0;
|
||||
@ -89,6 +91,8 @@ void ThreadPool::pruneThread()
|
||||
while(true)
|
||||
{
|
||||
boost::system_time timeout = boost::get_system_time() + boost::posix_time::minutes(1);
|
||||
if (fStop)
|
||||
return;
|
||||
if (!fPruneThreadEnd.timed_wait(fPruneMutex, timeout))
|
||||
{
|
||||
while(!fPruneThreads.empty())
|
||||
|
Reference in New Issue
Block a user