forked from qt-creator/qt-creator
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 <assam.boudjelthia@qt.io>
This commit is contained in:
@@ -532,8 +532,6 @@ void AndroidSdkManagerPrivate::reloadSdkPackages()
|
|||||||
spinner.reset(new Spinner(SpinnerSize::Medium, m_spinnerTarget));
|
spinner.reset(new Spinner(SpinnerSize::Medium, m_spinnerTarget));
|
||||||
spinner->show();
|
spinner->show();
|
||||||
}
|
}
|
||||||
qDeleteAll(m_allPackages);
|
|
||||||
m_allPackages.clear();
|
|
||||||
|
|
||||||
lastSdkManagerPath = AndroidConfig::sdkManagerToolPath();
|
lastSdkManagerPath = AndroidConfig::sdkManagerToolPath();
|
||||||
m_packageListingSuccessful = false;
|
m_packageListingSuccessful = false;
|
||||||
@@ -548,6 +546,8 @@ void AndroidSdkManagerPrivate::reloadSdkPackages()
|
|||||||
QStringList args({"--list", "--verbose"});
|
QStringList args({"--list", "--verbose"});
|
||||||
args << AndroidConfig::sdkManagerToolArgs();
|
args << AndroidConfig::sdkManagerToolArgs();
|
||||||
m_packageListingSuccessful = sdkManagerCommand(args, &packageListing);
|
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) {
|
if (m_packageListingSuccessful) {
|
||||||
SdkManagerOutputParser parser(m_allPackages);
|
SdkManagerOutputParser parser(m_allPackages);
|
||||||
parser.parsePackageListing(packageListing);
|
parser.parsePackageListing(packageListing);
|
||||||
|
Reference in New Issue
Block a user