fix: race condition on ResourceFolderModel tests

This (hopefully) fixes the race contiditions that sometimes got
triggered in tests.

Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
flow
2022-09-03 13:25:05 -03:00
parent 3b13e692d2
commit 42c81395b3
9 changed files with 46 additions and 55 deletions

View File

@ -36,7 +36,7 @@ class BasicFolderLoadTask : public Task {
[[nodiscard]] bool canAbort() const override { return true; }
bool abort() override
{
m_aborted = true;
m_aborted.store(true);
return true;
}
@ -49,7 +49,7 @@ class BasicFolderLoadTask : public Task {
}
if (m_aborted)
emitAborted();
emit finished();
else
emitSucceeded();
}
@ -58,7 +58,7 @@ private:
QDir m_dir;
ResultPtr m_result;
bool m_aborted = false;
std::atomic<bool> m_aborted = false;
std::function<Resource*(QFileInfo const&)> m_create_func;
};

View File

@ -499,7 +499,7 @@ void LocalModParseTask::processAsLitemod()
bool LocalModParseTask::abort()
{
m_aborted = true;
m_aborted.store(true);
return true;
}
@ -521,7 +521,7 @@ void LocalModParseTask::executeTask()
}
if (m_aborted)
emitAborted();
emit finished();
else
emitSucceeded();
}

View File

@ -39,5 +39,5 @@ private:
QFileInfo m_modFile;
ResultPtr m_result;
bool m_aborted = false;
std::atomic<bool> m_aborted = false;
};

View File

@ -38,8 +38,8 @@
#include "minecraft/mod/MetadataHandler.h"
ModFolderLoadTask::ModFolderLoadTask(QDir mods_dir, QDir index_dir, bool is_indexed, bool clean_orphan, QObject* parent)
: Task(parent, false), m_mods_dir(mods_dir), m_index_dir(index_dir), m_is_indexed(is_indexed), m_clean_orphan(clean_orphan), m_result(new Result())
ModFolderLoadTask::ModFolderLoadTask(QDir mods_dir, QDir index_dir, bool is_indexed, bool clean_orphan)
: Task(nullptr, false), m_mods_dir(mods_dir), m_index_dir(index_dir), m_is_indexed(is_indexed), m_clean_orphan(clean_orphan), m_result(new Result())
{}
void ModFolderLoadTask::executeTask()
@ -96,7 +96,10 @@ void ModFolderLoadTask::executeTask()
}
}
emitSucceeded();
if (m_aborted)
emit finished();
else
emitSucceeded();
}
void ModFolderLoadTask::getFromMetadata()

View File

@ -57,7 +57,15 @@ public:
}
public:
ModFolderLoadTask(QDir mods_dir, QDir index_dir, bool is_indexed, bool clean_orphan = false, QObject* parent = nullptr);
ModFolderLoadTask(QDir mods_dir, QDir index_dir, bool is_indexed, bool clean_orphan = false);
[[nodiscard]] bool canAbort() const override { return true; }
bool abort() override
{
m_aborted.store(true);
return true;
}
void executeTask() override;
@ -69,4 +77,6 @@ private:
bool m_is_indexed;
bool m_clean_orphan;
ResultPtr m_result;
std::atomic<bool> m_aborted = false;
};