summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLC <mathew1800@gmail.com>2020-08-16 08:57:35 -0400
committerGitHub <noreply@github.com>2020-08-16 08:57:35 -0400
commit2c5920dccc912384a429fcb02cb490a634c6290a (patch)
treee467ee3bd2d9c2036e4dcf400e82b67eefd9deb3 /Source/Core
parent6fc7135047c5fe7feee3b04cc975d02d445d83da (diff)
parentddeb2236aebb165af8f75c117a68ad1848e0b4e3 (diff)
Merge pull request #9028 from cristian64/netplaybrowser_deadlock_on_exit
DolphinQt: Prevent deadlock when exiting the NetPlay Session Browser dialog
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt/NetPlay/NetPlayBrowser.cpp38
-rw-r--r--Source/Core/DolphinQt/NetPlay/NetPlayBrowser.h7
2 files changed, 28 insertions, 17 deletions
diff --git a/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.cpp b/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.cpp
index fc8f201b90..010dba6ab4 100644
--- a/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.cpp
+++ b/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.cpp
@@ -26,7 +26,6 @@
#include "Core/ConfigManager.h"
#include "DolphinQt/QtUtils/ModalMessageBox.h"
-#include "DolphinQt/QtUtils/RunOnObject.h"
#include "DolphinQt/Settings.h"
NetPlayBrowser::NetPlayBrowser(QWidget* parent) : QDialog(parent)
@@ -35,6 +34,7 @@ NetPlayBrowser::NetPlayBrowser(QWidget* parent) : QDialog(parent)
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
CreateWidgets();
+ RestoreSettings();
ConnectWidgets();
resize(750, 500);
@@ -45,8 +45,6 @@ NetPlayBrowser::NetPlayBrowser(QWidget* parent) : QDialog(parent)
m_refresh_run.Set(true);
m_refresh_thread = std::thread([this] { RefreshLoop(); });
- RestoreSettings();
-
UpdateList();
Refresh();
}
@@ -149,6 +147,11 @@ void NetPlayBrowser::ConnectWidgets()
connect(m_table_widget, &QTableWidget::itemSelectionChanged, this,
&NetPlayBrowser::OnSelectionChanged);
connect(m_table_widget, &QTableWidget::itemDoubleClicked, this, &NetPlayBrowser::accept);
+
+ connect(this, &NetPlayBrowser::UpdateStatusRequested, this,
+ &NetPlayBrowser::OnUpdateStatusRequested, Qt::QueuedConnection);
+ connect(this, &NetPlayBrowser::UpdateListRequested, this, &NetPlayBrowser::OnUpdateListRequested,
+ Qt::QueuedConnection);
}
void NetPlayBrowser::Refresh()
@@ -192,10 +195,7 @@ void NetPlayBrowser::RefreshLoop()
lock.unlock();
- RunOnObject(this, [this] {
- m_status_label->setText(tr("Refreshing..."));
- return nullptr;
- });
+ emit UpdateStatusRequested(tr("Refreshing..."));
NetPlayIndex client;
@@ -203,19 +203,12 @@ void NetPlayBrowser::RefreshLoop()
if (entries)
{
- RunOnObject(this, [this, &entries] {
- m_sessions = *entries;
- UpdateList();
- return nullptr;
- });
+ emit UpdateListRequested(std::move(*entries));
}
else
{
- RunOnObject(this, [this, &client] {
- m_status_label->setText(tr("Error obtaining session list: %1")
- .arg(QString::fromStdString(client.GetLastError())));
- return nullptr;
- });
+ emit UpdateStatusRequested(tr("Error obtaining session list: %1")
+ .arg(QString::fromStdString(client.GetLastError())));
}
}
}
@@ -278,6 +271,17 @@ void NetPlayBrowser::OnSelectionChanged()
->setEnabled(!m_table_widget->selectedItems().isEmpty());
}
+void NetPlayBrowser::OnUpdateStatusRequested(const QString& status)
+{
+ m_status_label->setText(status);
+}
+
+void NetPlayBrowser::OnUpdateListRequested(std::vector<NetPlaySession> sessions)
+{
+ m_sessions = std::move(sessions);
+ UpdateList();
+}
+
void NetPlayBrowser::accept()
{
if (m_table_widget->selectedItems().isEmpty())
diff --git a/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.h b/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.h
index 3a7648be51..86dc0f5cce 100644
--- a/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.h
+++ b/Source/Core/DolphinQt/NetPlay/NetPlayBrowser.h
@@ -35,6 +35,8 @@ public:
void accept() override;
signals:
void Join();
+ void UpdateStatusRequested(const QString& status);
+ void UpdateListRequested(std::vector<NetPlaySession> sessions);
private:
void CreateWidgets();
@@ -46,6 +48,9 @@ private:
void OnSelectionChanged();
+ void OnUpdateStatusRequested(const QString& status);
+ void OnUpdateListRequested(std::vector<NetPlaySession> sessions);
+
void SaveSettings() const;
void RestoreSettings();
@@ -71,3 +76,5 @@ private:
Common::Flag m_refresh_run;
Common::Event m_refresh_event;
};
+
+Q_DECLARE_METATYPE(std::vector<NetPlaySession>)