aboutsummaryrefslogtreecommitdiff
path: root/launcher/tasks
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-07-24 17:16:14 -0300
committerflow <flowlnlnln@gmail.com>2022-08-28 16:29:01 -0300
commitbdf464e792f4b0c8a20f92a9073699c5fd98cd46 (patch)
tree8de03b48b08b8b3e9e3a213a8046a4e6ebeee910 /launcher/tasks
parentc410bb4ecbc553fa6016a4c4e58026343deeec33 (diff)
downloadPrismLauncher-bdf464e792f4b0c8a20f92a9073699c5fd98cd46.tar.gz
PrismLauncher-bdf464e792f4b0c8a20f92a9073699c5fd98cd46.tar.bz2
PrismLauncher-bdf464e792f4b0c8a20f92a9073699c5fd98cd46.zip
fix: abort logic running subsequent tasks anyways some times
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/tasks')
-rw-r--r--launcher/tasks/ConcurrentTask.cpp20
-rw-r--r--launcher/tasks/ConcurrentTask.h4
2 files changed, 16 insertions, 8 deletions
diff --git a/launcher/tasks/ConcurrentTask.cpp b/launcher/tasks/ConcurrentTask.cpp
index ecd7ae13..484ac58e 100644
--- a/launcher/tasks/ConcurrentTask.cpp
+++ b/launcher/tasks/ConcurrentTask.cpp
@@ -45,25 +45,31 @@ void ConcurrentTask::executeTask()
bool ConcurrentTask::abort()
{
+ m_queue.clear();
+ m_aborted = true;
+
if (m_doing.isEmpty()) {
// Don't call emitAborted() here, we want to bypass the 'is the task running' check
emit aborted();
emit finished();
- m_aborted = true;
return true;
}
- m_queue.clear();
+ bool suceedeed = true;
- m_aborted = true;
- for (auto task : m_doing)
- m_aborted &= task->abort();
+ QMutableHashIterator<Task*, Task::Ptr> doing_iter(m_doing);
+ while (doing_iter.hasNext()) {
+ auto task = doing_iter.next();
+ suceedeed &= (task.value())->abort();
+ }
- if (m_aborted)
+ if (suceedeed)
emitAborted();
+ else
+ emitFailed(tr("Failed to abort all running tasks."));
- return m_aborted;
+ return suceedeed;
}
void ConcurrentTask::startNext()
diff --git a/launcher/tasks/ConcurrentTask.h b/launcher/tasks/ConcurrentTask.h
index 5898899d..f1279d32 100644
--- a/launcher/tasks/ConcurrentTask.h
+++ b/launcher/tasks/ConcurrentTask.h
@@ -9,7 +9,9 @@ class ConcurrentTask : public Task {
Q_OBJECT
public:
explicit ConcurrentTask(QObject* parent = nullptr, QString task_name = "", int max_concurrent = 6);
- virtual ~ConcurrentTask();
+ ~ConcurrentTask() override;
+
+ bool canAbort() const override { return true; }
inline auto isMultiStep() const -> bool override { return m_queue.size() > 1; };
auto getStepProgress() const -> qint64 override;