Ensured that GameTracker's internal worker thread is flushed on exit to avoid crashes when accessing stale, already-destroyed data, and to favor responsiveness.
This commit is contained in:
parent
213610e95d
commit
dc7b92651f
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "DolphinQt/GameList/GameTracker.h"
|
#include "DolphinQt/GameList/GameTracker.h"
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QDirIterator>
|
#include <QDirIterator>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
@ -35,6 +36,7 @@ GameTracker::GameTracker(QObject* parent) : QFileSystemWatcher(parent)
|
||||||
qRegisterMetaType<std::shared_ptr<const UICommon::GameFile>>();
|
qRegisterMetaType<std::shared_ptr<const UICommon::GameFile>>();
|
||||||
qRegisterMetaType<std::string>();
|
qRegisterMetaType<std::string>();
|
||||||
|
|
||||||
|
connect(qApp, &QApplication::aboutToQuit, this, [this] { m_load_thread.Cancel(); });
|
||||||
connect(this, &QFileSystemWatcher::directoryChanged, this, &GameTracker::UpdateDirectory);
|
connect(this, &QFileSystemWatcher::directoryChanged, this, &GameTracker::UpdateDirectory);
|
||||||
connect(this, &QFileSystemWatcher::fileChanged, this, &GameTracker::UpdateFile);
|
connect(this, &QFileSystemWatcher::fileChanged, this, &GameTracker::UpdateFile);
|
||||||
connect(&Settings::Instance(), &Settings::AutoRefreshToggled, this, [] {
|
connect(&Settings::Instance(), &Settings::AutoRefreshToggled, this, [] {
|
||||||
|
@ -255,7 +257,7 @@ void GameTracker::RemoveDirectoryInternal(const QString& dir)
|
||||||
void GameTracker::UpdateDirectoryInternal(const QString& dir)
|
void GameTracker::UpdateDirectoryInternal(const QString& dir)
|
||||||
{
|
{
|
||||||
auto it = GetIterator(dir);
|
auto it = GetIterator(dir);
|
||||||
while (it->hasNext())
|
while (it->hasNext() && !m_load_thread.IsCancelled())
|
||||||
{
|
{
|
||||||
QString path = QFileInfo(it->next()).canonicalFilePath();
|
QString path = QFileInfo(it->next()).canonicalFilePath();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue