aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/android/androidsdkmanager.cpp
diff options
context:
space:
mode:
authorJarek Kobus <[email protected]>2024-10-29 12:48:21 +0100
committerJarek Kobus <[email protected]>2024-10-29 18:58:55 +0000
commit377f56294efe3f563b6d841854862f2e38a21cfa (patch)
tree953f3af2bcbbe7b11df0889e94046b944ea46082 /src/plugins/android/androidsdkmanager.cpp
parent96cb78b617bb9b43f62ab986bddff9175e8a3374 (diff)
Android: Fix crash on reloadPackages
The reloadPackages() deletes old packages, while the internal pointers to these packages are still stored inside the AndroidSdkModel. Later, sdkManagerCommand() executes in a blocking way a process with EventLoopMode::On, causing the model view to repaint and take invalid data from the AndroidSdkModel. The fix is to delete the packages after the nested event loop is finished. Fixes: QTCREATORBUG-31920 Change-Id: Id7e41f7d43ed299329974925c3dc246c4ffbf260 Reviewed-by: Assam Boudjelthia <[email protected]>
Diffstat (limited to 'src/plugins/android/androidsdkmanager.cpp')
-rw-r--r--src/plugins/android/androidsdkmanager.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp
index e5f2be4a7d1..b0cfa4bfdcb 100644
--- a/src/plugins/android/androidsdkmanager.cpp
+++ b/src/plugins/android/androidsdkmanager.cpp
@@ -532,8 +532,6 @@ void AndroidSdkManagerPrivate::reloadSdkPackages()
spinner.reset(new Spinner(SpinnerSize::Medium, m_spinnerTarget));
spinner->show();
}
- qDeleteAll(m_allPackages);
- m_allPackages.clear();
lastSdkManagerPath = AndroidConfig::sdkManagerToolPath();
m_packageListingSuccessful = false;
@@ -548,6 +546,8 @@ void AndroidSdkManagerPrivate::reloadSdkPackages()
QStringList args({"--list", "--verbose"});
args << AndroidConfig::sdkManagerToolArgs();
m_packageListingSuccessful = sdkManagerCommand(args, &packageListing);
+ qDeleteAll(m_allPackages); // Must be done after the blocking command execution. See QTCREATORBUG-31920.
+ m_allPackages.clear();
if (m_packageListingSuccessful) {
SdkManagerOutputParser parser(m_allPackages);
parser.parsePackageListing(packageListing);