forked from qt-creator/qt-creator
Android: Fix a possible race condition in SDK manager
QFutureWatcher connections are made after calling setFuture. This can lead to race condition Task-number: QTCREATORBUG-19082 Change-Id: I87379c2b14c722cf4d4a9a374bd1ac1e72b52d5c Reviewed-by: BogDan Vatra <bogdan@kdab.com>
This commit is contained in:
@@ -323,7 +323,6 @@ void AndroidSdkManagerWidget::addPackageFuture(const QFuture<AndroidSdkManager::
|
||||
QTC_ASSERT(!m_currentOperation, return);
|
||||
if (!future.isFinished() || !future.isCanceled()) {
|
||||
m_currentOperation = new QFutureWatcher<AndroidSdkManager::OperationOutput>;
|
||||
m_currentOperation->setFuture(future);
|
||||
connect(m_currentOperation,
|
||||
&QFutureWatcher<AndroidSdkManager::OperationOutput>::resultReadyAt,
|
||||
this, &AndroidSdkManagerWidget::onOperationResult);
|
||||
@@ -334,6 +333,7 @@ void AndroidSdkManagerWidget::addPackageFuture(const QFuture<AndroidSdkManager::
|
||||
[this](int value) {
|
||||
m_ui->operationProgress->setValue(value);
|
||||
});
|
||||
m_currentOperation->setFuture(future);
|
||||
} else {
|
||||
qCDebug(androidSdkMgrUiLog) << "Operation canceled/finished before adding to the queue";
|
||||
if (m_sdkManager->isBusy()) {
|
||||
|
Reference in New Issue
Block a user