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()
{
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
@ -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<BaseVersionPtr> versions)
{
beginResetModel();
m_vlist = versions;
m_loaded = true;
sortVersions();
if(m_vlist.size())
{
@ -95,6 +114,8 @@ void JavaInstallList::updateListData(QList<BaseVersionPtr> versions)
best->recommended = true;
}
endResetModel();
m_status = Status::Done;
m_loadTask.reset();
}
bool sortJavas(BaseVersionPtr left, BaseVersionPtr right)

View File

@ -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<BaseVersionPtr> versions) override;
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