Fixed error when BackgroundSchedulePool is initialized in context of a query #2482

This commit is contained in:
Alexey Milovidov 2018-08-22 07:04:02 +03:00
parent ca5b83ac39
commit deb3ce534c

View File

@ -211,26 +211,28 @@ void BackgroundSchedulePool::cancelDelayedTask(const TaskInfoPtr & task, std::lo
} }
void BackgroundSchedulePool::attachToThreadGroup()
{
std::lock_guard lock(delayed_tasks_mutex);
if (thread_group)
{
/// Put all threads to one thread pool
CurrentThread::attachTo(thread_group);
}
else
{
CurrentThread::initializeQuery();
thread_group = CurrentThread::getGroup();
}
}
void BackgroundSchedulePool::threadFunction() void BackgroundSchedulePool::threadFunction()
{ {
setThreadName("BackgrSchedPool"); setThreadName("BackgrSchedPool");
{ attachToThreadGroup();
std::lock_guard lock(delayed_tasks_mutex);
if (thread_group)
{
/// Put all threads to one thread pool
CurrentThread::attachTo(thread_group);
}
else
{
CurrentThread::initializeQuery();
thread_group = CurrentThread::getGroup();
}
}
/// Put all threads to one thread pool
SCOPE_EXIT({ CurrentThread::detachQueryIfNotDetached(); }); SCOPE_EXIT({ CurrentThread::detachQueryIfNotDetached(); });
CurrentThread::getMemoryTracker().setMetric(CurrentMetrics::MemoryTrackingInBackgroundSchedulePool); CurrentThread::getMemoryTracker().setMetric(CurrentMetrics::MemoryTrackingInBackgroundSchedulePool);
@ -249,8 +251,7 @@ void BackgroundSchedulePool::delayExecutionThreadFunction()
{ {
setThreadName("BckSchPoolDelay"); setThreadName("BckSchPoolDelay");
/// Put all threads to one thread pool attachToThreadGroup();
CurrentThread::attachTo(thread_group);
SCOPE_EXIT({ CurrentThread::detachQueryIfNotDetached(); }); SCOPE_EXIT({ CurrentThread::detachQueryIfNotDetached(); });
while (!shutdown) while (!shutdown)