Add a task save lock
This commit is contained in:
		
							parent
							
								
									ee8d6ffcc7
								
							
						
					
					
						commit
						12cf91e4b2
					
				@ -882,12 +882,12 @@ void PackageConf::sync() {
 | 
			
		||||
    {
 | 
			
		||||
        std::lock_guard<std::mutex> lock(*task_mutex_);
 | 
			
		||||
        for (auto [job_status, task] : jobstatus_task_map_) {
 | 
			
		||||
            if (task) {
 | 
			
		||||
                auto sync_func = [this, task]() mutable {
 | 
			
		||||
                    if (task->jobstatus != nullptr) task->save(id);
 | 
			
		||||
                };
 | 
			
		||||
                sync_func();
 | 
			
		||||
            }
 | 
			
		||||
            if (!task) continue;
 | 
			
		||||
 | 
			
		||||
            auto sync_func = [this, task]() mutable {
 | 
			
		||||
                if (task->jobstatus != nullptr) task->save(id);
 | 
			
		||||
            };
 | 
			
		||||
            sync_func();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1148,6 +1148,7 @@ JobStatus::JobStatus(int id) : id(id) {
 | 
			
		||||
Task::Task(std::shared_ptr<JobStatus> jobstatus, std::int64_t time, std::shared_ptr<PackageConf> packageconf)
 | 
			
		||||
    : jobstatus(jobstatus), queue_time(time), is_running(false), log(std::make_shared<Log>()), parent_packageconf(packageconf)
 | 
			
		||||
{
 | 
			
		||||
    std::lock_guard<std::mutex> sync_lock(*sync_mutex_);
 | 
			
		||||
    assert(log != nullptr && "Log pointer should never be null");
 | 
			
		||||
    QSqlQuery insert_query(get_thread_connection());
 | 
			
		||||
    insert_query.prepare("INSERT INTO task (packageconf_id, jobstatus_id, queue_time) VALUES (?, ?, ?)");
 | 
			
		||||
@ -1207,6 +1208,7 @@ bool Task::compare(const std::shared_ptr<Task>& lhs, const std::shared_ptr<Task>
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::set<std::shared_ptr<Task>> Task::get_completed_tasks(std::vector<std::shared_ptr<PackageConf>> packageconfs, std::shared_ptr<std::map<std::string, std::shared_ptr<JobStatus>>> job_statuses, int page, int per_page) {
 | 
			
		||||
    std::lock_guard<std::mutex> sync_lock(*sync_mutex_);
 | 
			
		||||
    std::set<std::shared_ptr<Task>> result;
 | 
			
		||||
 | 
			
		||||
    if (per_page < 1) { per_page = 1; }
 | 
			
		||||
@ -1251,6 +1253,7 @@ std::set<std::shared_ptr<Task>> Task::get_completed_tasks(std::vector<std::share
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Task::save(int _packageconf_id) {
 | 
			
		||||
    std::lock_guard<std::mutex> sync_lock(*sync_mutex_);
 | 
			
		||||
    QSqlQuery query(get_thread_connection());
 | 
			
		||||
    query.prepare("UPDATE task SET jobstatus_id = ?, queue_time = ?, start_time = ?, finish_time = ?, successful = ?, log = ? WHERE id = ?");
 | 
			
		||||
    query.addBindValue(jobstatus->id);
 | 
			
		||||
 | 
			
		||||
@ -255,6 +255,9 @@ public:
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static bool compare(const std::shared_ptr<Task>& lhs, const std::shared_ptr<Task>& rhs);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    std::shared_ptr<std::mutex> sync_mutex_ = std::make_shared<std::mutex>();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
inline size_t qHash(const PackageConf::PackageConfPlain& key, size_t seed = 0) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user