Queue addition of housekeeper tasks
This fixes the hang on startup when binlogrouter calls hktask_add.
This commit is contained in:
@ -61,20 +61,20 @@ MainWorker& MainWorker::get()
|
|||||||
|
|
||||||
void MainWorker::add_task(const char* zName, TASKFN func, void* pData, int frequency)
|
void MainWorker::add_task(const char* zName, TASKFN func, void* pData, int frequency)
|
||||||
{
|
{
|
||||||
call([=]() {
|
execute([=]() {
|
||||||
mxb_assert(m_tasks_by_name.find(zName) == m_tasks_by_name.end());
|
mxb_assert(m_tasks_by_name.find(zName) == m_tasks_by_name.end());
|
||||||
|
|
||||||
Task task(zName, func, pData, frequency);
|
Task task(zName, func, pData, frequency);
|
||||||
|
|
||||||
auto p = m_tasks_by_name.insert(std::make_pair(std::string(zName), task));
|
auto p = m_tasks_by_name.insert(std::make_pair(std::string(zName), task));
|
||||||
Task& inserted_task = (*p.first).second;
|
Task& inserted_task = (*p.first).second;
|
||||||
|
|
||||||
inserted_task.id = delayed_call(frequency * 1000,
|
inserted_task.id = delayed_call(frequency * 1000,
|
||||||
&MainWorker::call_task,
|
&MainWorker::call_task,
|
||||||
this,
|
this,
|
||||||
&inserted_task);
|
&inserted_task);
|
||||||
},
|
},
|
||||||
EXECUTE_AUTO);
|
EXECUTE_AUTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWorker::remove_task(const char* zName)
|
void MainWorker::remove_task(const char* zName)
|
||||||
|
Reference in New Issue
Block a user