aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/thread/Task.cpp2
-rw-r--r--src/core/thread/TaskRunner.cpp27
2 files changed, 16 insertions, 13 deletions
diff --git a/src/core/thread/Task.cpp b/src/core/thread/Task.cpp
index f34a38b9..a8fb3d62 100644
--- a/src/core/thread/Task.cpp
+++ b/src/core/thread/Task.cpp
@@ -192,7 +192,7 @@ Task::~Task() = default;
*
* @return QString
*/
-QString Task::GetFullID() const { return p_->GetFullID(); }
+auto Task::GetFullID() const -> QString { return p_->GetFullID(); }
QString Task::GetUUID() const { return p_->GetUUID(); }
diff --git a/src/core/thread/TaskRunner.cpp b/src/core/thread/TaskRunner.cpp
index c7d92382..8caf2e2a 100644
--- a/src/core/thread/TaskRunner.cpp
+++ b/src/core/thread/TaskRunner.cpp
@@ -48,20 +48,23 @@ class TaskRunner::Impl : public QThread {
task->SafelyRun();
}
- auto RegisterTask(const QString& name, const Task::TaskRunnable& runnerable,
- const Task::TaskCallback& cb,
- DataObjectPtr params) -> Task::TaskHandler {
- auto* raw_task = new Task(runnerable, name, std::move(params), cb);
+ auto RegisterTask(const QString& name, const Task::TaskRunnable& runnable,
+ const Task::TaskCallback& cb, DataObjectPtr params)
+ -> Task::TaskHandler {
+ auto* raw_task = new Task(runnable, name, std::move(params), cb);
raw_task->setParent(nullptr);
raw_task->moveToThread(this);
- connect(raw_task, &Task::SignalRun, this, [this, raw_task]() {
- pending_tasks_[raw_task->GetFullID()] = raw_task;
- });
+ const auto full_id = raw_task->GetFullID();
- connect(raw_task, &Task::SignalTaskEnd, this, [this, raw_task]() {
- pending_tasks_.remove(raw_task->GetFullID());
- });
+ connect(raw_task, &Task::SignalRun, this,
+ [this, task = QPointer<Task>(raw_task), full_id]() {
+ if (task == nullptr) return;
+ pending_tasks_[full_id] = task;
+ });
+
+ connect(raw_task, &Task::SignalTaskEnd, this,
+ [this, full_id]() { pending_tasks_.remove(full_id); });
return Task::TaskHandler(raw_task);
}
@@ -136,8 +139,8 @@ auto TaskRunner::IsRunning() -> bool { return p_->isRunning(); }
auto TaskRunner::RegisterTask(const QString& name,
const Task::TaskRunnable& runnable,
- const Task::TaskCallback& cb,
- DataObjectPtr p_pbj) -> Task::TaskHandler {
+ const Task::TaskCallback& cb, DataObjectPtr p_pbj)
+ -> Task::TaskHandler {
return p_->RegisterTask(name, runnable, cb, p_pbj);
}
} // namespace GpgFrontend::Thread