Pass std::string to add/remove task
By passing strings instead of const char pointers to the task control functions, we can safely make copies of them knowing that the contents won't disappear.
This commit is contained in:
@ -51,8 +51,8 @@ public:
|
||||
*/
|
||||
static MainWorker& get();
|
||||
|
||||
void add_task(const char* zName, TASKFN func, void* pData, int frequency);
|
||||
void remove_task(const char* zName);
|
||||
void add_task(const std::string& name, TASKFN func, void* pData, int frequency);
|
||||
void remove_task(const std::string& name);
|
||||
|
||||
void show_tasks(DCB* pDcb) const;
|
||||
json_t* tasks_to_json(const char* zhost) const;
|
||||
|
@ -59,14 +59,14 @@ MainWorker& MainWorker::get()
|
||||
return *this_unit.pCurrent_main;
|
||||
}
|
||||
|
||||
void MainWorker::add_task(const char* zName, TASKFN func, void* pData, int frequency)
|
||||
void MainWorker::add_task(const std::string& name, TASKFN func, void* pData, int frequency)
|
||||
{
|
||||
execute([=]() {
|
||||
mxb_assert(m_tasks_by_name.find(zName) == m_tasks_by_name.end());
|
||||
mxb_assert_message(m_tasks_by_name.find(name) == m_tasks_by_name.end(), name.c_str());
|
||||
|
||||
Task task(zName, func, pData, frequency);
|
||||
Task task(name.c_str(), 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(name, task));
|
||||
Task& inserted_task = (*p.first).second;
|
||||
|
||||
inserted_task.id = delayed_call(frequency * 1000,
|
||||
@ -77,21 +77,22 @@ void MainWorker::add_task(const char* zName, TASKFN func, void* pData, int frequ
|
||||
EXECUTE_AUTO);
|
||||
}
|
||||
|
||||
void MainWorker::remove_task(const char* zName)
|
||||
void MainWorker::remove_task(const std::string& name)
|
||||
{
|
||||
call([this, zName]() {
|
||||
auto it = m_tasks_by_name.find(zName);
|
||||
mxb_assert(it != m_tasks_by_name.end());
|
||||
|
||||
if (it != m_tasks_by_name.end())
|
||||
{
|
||||
MXB_AT_DEBUG(bool cancelled =) cancel_delayed_call(it->second.id);
|
||||
mxb_assert(cancelled);
|
||||
call([this, name]() {
|
||||
auto it = m_tasks_by_name.find(name);
|
||||
mxb_assert(it != m_tasks_by_name.end());
|
||||
|
||||
m_tasks_by_name.erase(it);
|
||||
}
|
||||
},
|
||||
EXECUTE_AUTO);
|
||||
if (it != m_tasks_by_name.end())
|
||||
{
|
||||
MXB_AT_DEBUG(bool cancelled = ) cancel_delayed_call(it->second.id);
|
||||
mxb_assert(cancelled);
|
||||
|
||||
m_tasks_by_name.erase(it);
|
||||
}
|
||||
},
|
||||
EXECUTE_AUTO);
|
||||
}
|
||||
|
||||
void MainWorker::show_tasks(DCB* pDcb) const
|
||||
|
Reference in New Issue
Block a user