From 5565a2f85e8b7a4b0e4758b5b6f4d806b964cf94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 18 Apr 2017 16:45:58 +0200 Subject: [PATCH] NOISSUE fix crash because of early destruction of java list load task --- api/logic/java/JavaInstallList.cpp | 27 ++++++++++++++++++++++++--- api/logic/java/JavaInstallList.h | 14 ++++++++++++-- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/api/logic/java/JavaInstallList.cpp b/api/logic/java/JavaInstallList.cpp index dbf66f5f..44ac861d 100644 --- a/api/logic/java/JavaInstallList.cpp +++ b/api/logic/java/JavaInstallList.cpp @@ -31,7 +31,27 @@ JavaInstallList::JavaInstallList(QObject *parent) : BaseVersionList(parent) shared_qobject_ptr JavaInstallList::getLoadTask() { - return new JavaListLoadTask(this); + load(); + return getCurrentTask(); +} + +shared_qobject_ptr JavaInstallList::getCurrentTask() +{ + if(m_status == Status::InProgress) + { + return m_loadTask; + } + return nullptr; +} + +void JavaInstallList::load() +{ + if(m_status != Status::InProgress) + { + m_status = Status::InProgress; + m_loadTask = new JavaListLoadTask(this); + m_loadTask->start(); + } } const BaseVersionPtr JavaInstallList::at(int i) const @@ -41,7 +61,7 @@ const BaseVersionPtr JavaInstallList::at(int i) const bool JavaInstallList::isLoaded() { - return m_loaded; + return m_status == JavaInstallList::Status::Done; } int JavaInstallList::count() const @@ -87,7 +107,6 @@ void JavaInstallList::updateListData(QList versions) { beginResetModel(); m_vlist = versions; - m_loaded = true; sortVersions(); if(m_vlist.size()) { @@ -95,6 +114,8 @@ void JavaInstallList::updateListData(QList versions) best->recommended = true; } endResetModel(); + m_status = Status::Done; + m_loadTask.reset(); } bool sortJavas(BaseVersionPtr left, BaseVersionPtr right) diff --git a/api/logic/java/JavaInstallList.h b/api/logic/java/JavaInstallList.h index afc5ef43..934e588b 100644 --- a/api/logic/java/JavaInstallList.h +++ b/api/logic/java/JavaInstallList.h @@ -31,6 +31,12 @@ class JavaListLoadTask; class MULTIMC_LOGIC_EXPORT JavaInstallList : public BaseVersionList { Q_OBJECT + enum class Status + { + NotDone, + InProgress, + Done + }; public: explicit JavaInstallList(QObject *parent = 0); @@ -47,9 +53,13 @@ public slots: void updateListData(QList versions) override; protected: - QList m_vlist; + void load(); + shared_qobject_ptr getCurrentTask(); - bool m_loaded = false; +protected: + Status m_status = Status::NotDone; + shared_qobject_ptr m_loadTask; + QList m_vlist; }; class JavaListLoadTask : public Task