From e679804ea1291c30854ea91dd27c72e46f7fe12a Mon Sep 17 00:00:00 2001 From: kamiyadm Date: Wed, 18 Dec 2024 15:52:26 +0800 Subject: [PATCH] fix: PM blocked in a cancled task Set the runningTaskObjectPath before the next available task start instead of after the last task finished. Log: --- .../src/linglong/package_manager/package_manager.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/libs/linglong/src/linglong/package_manager/package_manager.cpp b/libs/linglong/src/linglong/package_manager/package_manager.cpp index 835f80feb..371f9a4fd 100644 --- a/libs/linglong/src/linglong/package_manager/package_manager.cpp +++ b/libs/linglong/src/linglong/package_manager/package_manager.cpp @@ -116,18 +116,14 @@ PackageManager::PackageManager(linglong::repo::OSTreeRepo &repo, QObject *parent } return; } - // start next task - this->runningTaskObjectPath = taskObjectPath; - if (this->taskList.empty()) { - this->runningTaskObjectPath = ""; - return; - }; + for (auto it = taskList.begin(); it != taskList.end(); ++it) { auto *task = *it; if (!task->getJob().has_value() || task->state() != linglong::api::types::v1::State::Queued) { continue; } + this->runningTaskObjectPath = task->taskObjectPath(); // execute the task qInfo() << QString("Task %1 start.").arg(task->taskID()); auto func = *task->getJob(); @@ -142,8 +138,8 @@ PackageManager::PackageManager(linglong::repo::OSTreeRepo &repo, QObject *parent auto nextIt = this->taskList.erase(it); task->deleteLater(); if (nextIt != taskList.end()) { - qInfo() << "Task switch to" << (*nextIt)->taskID(); - Q_EMIT this->TaskListChanged((*nextIt)->taskID(), "TaskSwitch"); + qInfo() << "Switch to next available task"; + Q_EMIT this->TaskListChanged("", "TaskSwitch"); } return; }