From 128381ce107d14596609ad8c8ee9ad3d42ae3f30 Mon Sep 17 00:00:00 2001 From: Baldur Karlsson Date: Mon, 12 Mar 2018 15:38:03 +0000 Subject: [PATCH] Fix refcounting with RemoteManager that could cause crash after refresh --- qrenderdoc/Windows/Dialogs/RemoteManager.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/qrenderdoc/Windows/Dialogs/RemoteManager.cpp b/qrenderdoc/Windows/Dialogs/RemoteManager.cpp index ba4f01994..188d4c0f1 100644 --- a/qrenderdoc/Windows/Dialogs/RemoteManager.cpp +++ b/qrenderdoc/Windows/Dialogs/RemoteManager.cpp @@ -187,8 +187,6 @@ void RemoteManager::addHost(RemoteHost *host) ui->refreshOne->setEnabled(false); ui->refreshAll->setEnabled(false); - m_Lookups.release(); - refreshHost(node); updateLookupsStatus(); @@ -205,12 +203,17 @@ void RemoteManager::runRemoteServer(RDTreeWidgetItem *node) RemoteHost *host = getRemoteHost(node); if(!host) + { + m_Lookups.acquire(); return; + } host->Launch(); // now refresh this host refreshHost(node); + + m_Lookups.acquire(); } void RemoteManager::refreshHost(RDTreeWidgetItem *node) @@ -220,6 +223,8 @@ void RemoteManager::refreshHost(RDTreeWidgetItem *node) if(!host) return; + m_Lookups.release(); + // this function looks up the remote connections and for each one open // queries it for the API, target (usually executable name) and if any user is already connected LambdaThread *th = new LambdaThread([this, node, host]() { @@ -629,6 +634,7 @@ void RemoteManager::on_connect_clicked() ui->refreshOne->setEnabled(false); ui->refreshAll->setEnabled(false); + // hold a ref for running the remote server m_Lookups.release(); LambdaThread *th = new LambdaThread([this, node]() { runRemoteServer(node); });