From 8574b4f1bc4097452c863cd3e4ef0ae1078805ae Mon Sep 17 00:00:00 2001
From: James Turner <james@flightgear.org>
Date: Tue, 28 Sep 2021 14:33:25 +0100
Subject: [PATCH] Launcher: improve local acft rescan behaviour

---
 src/GUI/LocalAircraftCache.cxx | 6 +++++-
 src/GUI/QtLauncher.cxx         | 8 ++++----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/GUI/LocalAircraftCache.cxx b/src/GUI/LocalAircraftCache.cxx
index b1cd1f591..8d286f416 100644
--- a/src/GUI/LocalAircraftCache.cxx
+++ b/src/GUI/LocalAircraftCache.cxx
@@ -485,6 +485,10 @@ private:
         QStringList filters;
         filters << "*-set.xml";
         Q_FOREACH(QFileInfo child, path.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot)) {
+            if (m_done) { // thread termination bail-out
+                return;
+            }
+            
             QDir childDir(child.absoluteFilePath());
             QMap<QString, AircraftItemPtr> baseAircraft;
             QList<AircraftItemPtr> variants;
@@ -729,7 +733,7 @@ void LocalAircraftCache::abandonCurrentScan()
                 &LocalAircraftCache::onScanFinished);
 
         d->m_scanThread->setDone();
-        if (!d->m_scanThread->wait(2000)) {
+        if (!d->m_scanThread->wait(32000)) {
             qWarning() << Q_FUNC_INFO << "scan thread failed to terminate";
         }
         d->m_scanThread.reset();
diff --git a/src/GUI/QtLauncher.cxx b/src/GUI/QtLauncher.cxx
index cfc940228..c08f87483 100644
--- a/src/GUI/QtLauncher.cxx
+++ b/src/GUI/QtLauncher.cxx
@@ -698,10 +698,6 @@ bool runLauncherDialog()
     }
 
     int appResult = qApp->exec();
-    if (appResult <= 0) {
-        return false; // quit
-    }
-
     // avoid crashes / NavCache races if the loader is still running after
     // the launcher exits
     if (naturalEarthLoader) {
@@ -716,6 +712,10 @@ bool runLauncherDialog()
     globals->clear_fg_scenery();
     globals->get_locale()->clear();
 
+    if (appResult <= 0) {
+        return false; // quit
+    }
+    
     return true;
 }