NOISSUE fix crash because of early destruction of java list load task

This commit is contained in:
Petr Mrázek 2017-04-18 16:45:58 +02:00
parent c4c8e99681
commit 5565a2f85e
2 changed files with 36 additions and 5 deletions

View File

@ -31,7 +31,27 @@ JavaInstallList::JavaInstallList(QObject *parent) : BaseVersionList(parent)
shared_qobject_ptr<Task> JavaInstallList::getLoadTask() shared_qobject_ptr<Task> JavaInstallList::getLoadTask()
{ {
return new JavaListLoadTask(this); load();
return getCurrentTask();
}
shared_qobject_ptr<Task> 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 const BaseVersionPtr JavaInstallList::at(int i) const
@ -41,7 +61,7 @@ const BaseVersionPtr JavaInstallList::at(int i) const
bool JavaInstallList::isLoaded() bool JavaInstallList::isLoaded()
{ {
return m_loaded; return m_status == JavaInstallList::Status::Done;
} }
int JavaInstallList::count() const int JavaInstallList::count() const
@ -87,7 +107,6 @@ void JavaInstallList::updateListData(QList<BaseVersionPtr> versions)
{ {
beginResetModel(); beginResetModel();
m_vlist = versions; m_vlist = versions;
m_loaded = true;
sortVersions(); sortVersions();
if(m_vlist.size()) if(m_vlist.size())
{ {
@ -95,6 +114,8 @@ void JavaInstallList::updateListData(QList<BaseVersionPtr> versions)
best->recommended = true; best->recommended = true;
} }
endResetModel(); endResetModel();
m_status = Status::Done;
m_loadTask.reset();
} }
bool sortJavas(BaseVersionPtr left, BaseVersionPtr right) bool sortJavas(BaseVersionPtr left, BaseVersionPtr right)

View File

@ -31,6 +31,12 @@ class JavaListLoadTask;
class MULTIMC_LOGIC_EXPORT JavaInstallList : public BaseVersionList class MULTIMC_LOGIC_EXPORT JavaInstallList : public BaseVersionList
{ {
Q_OBJECT Q_OBJECT
enum class Status
{
NotDone,
InProgress,
Done
};
public: public:
explicit JavaInstallList(QObject *parent = 0); explicit JavaInstallList(QObject *parent = 0);
@ -47,9 +53,13 @@ public slots:
void updateListData(QList<BaseVersionPtr> versions) override; void updateListData(QList<BaseVersionPtr> versions) override;
protected: protected:
QList<BaseVersionPtr> m_vlist; void load();
shared_qobject_ptr<Task> getCurrentTask();
bool m_loaded = false; protected:
Status m_status = Status::NotDone;
shared_qobject_ptr<JavaListLoadTask> m_loadTask;
QList<BaseVersionPtr> m_vlist;
}; };
class JavaListLoadTask : public Task class JavaListLoadTask : public Task