forked from qt-creator/qt-creator
QmakeProjectManager: Do not leak QmakeEvalResults
Fixes: QTCREATORBUG-26326 Change-Id: I2a4abf86e9dd607bf7a0bf0843b0c9bff943d704 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -1194,7 +1194,7 @@ QmakeProFile::~QmakeProFile()
|
|||||||
|
|
||||||
void QmakeProFile::setupFutureWatcher()
|
void QmakeProFile::setupFutureWatcher()
|
||||||
{
|
{
|
||||||
m_parseFutureWatcher = new QFutureWatcher<Internal::QmakeEvalResult *>;
|
m_parseFutureWatcher = new QFutureWatcher<Internal::QmakeEvalResultPtr>;
|
||||||
QObject::connect(m_parseFutureWatcher, &QFutureWatcherBase::finished, [this]() {
|
QObject::connect(m_parseFutureWatcher, &QFutureWatcherBase::finished, [this]() {
|
||||||
applyAsyncEvaluate(true);
|
applyAsyncEvaluate(true);
|
||||||
});
|
});
|
||||||
@@ -1292,10 +1292,10 @@ void QmakeProFile::asyncUpdate()
|
|||||||
m_readerExact->setExact(false);
|
m_readerExact->setExact(false);
|
||||||
m_parseFutureWatcher->waitForFinished();
|
m_parseFutureWatcher->waitForFinished();
|
||||||
QmakeEvalInput input = evalInput();
|
QmakeEvalInput input = evalInput();
|
||||||
QFuture<QmakeEvalResult *> future = Utils::runAsync(ProjectExplorerPlugin::sharedThreadPool(),
|
QFuture<QmakeEvalResultPtr> future = Utils::runAsync(ProjectExplorerPlugin::sharedThreadPool(),
|
||||||
QThread::LowestPriority,
|
QThread::LowestPriority,
|
||||||
&QmakeProFile::asyncEvaluate,
|
&QmakeProFile::asyncEvaluate,
|
||||||
this, input);
|
this, input);
|
||||||
m_parseFutureWatcher->setFuture(future);
|
m_parseFutureWatcher->setFuture(future);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1375,9 +1375,9 @@ static bool evaluateOne(const QmakeEvalInput &input, ProFile *pro,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
|
QmakeEvalResultPtr QmakeProFile::evaluate(const QmakeEvalInput &input)
|
||||||
{
|
{
|
||||||
auto *result = new QmakeEvalResult;
|
QmakeEvalResultPtr result(new QmakeEvalResult);
|
||||||
QtSupport::ProFileReader *exactBuildPassReader = nullptr;
|
QtSupport::ProFileReader *exactBuildPassReader = nullptr;
|
||||||
QtSupport::ProFileReader *cumulativeBuildPassReader = nullptr;
|
QtSupport::ProFileReader *cumulativeBuildPassReader = nullptr;
|
||||||
ProFile *pro;
|
ProFile *pro;
|
||||||
@@ -1635,10 +1635,9 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeProFile::asyncEvaluate(QFutureInterface<QmakeEvalResult *> &fi, QmakeEvalInput input)
|
void QmakeProFile::asyncEvaluate(QFutureInterface<QmakeEvalResultPtr> &fi, QmakeEvalInput input)
|
||||||
{
|
{
|
||||||
QmakeEvalResult *evalResult = evaluate(input);
|
fi.reportResult(evaluate(input));
|
||||||
fi.reportResult(evalResult);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeProFile::applyAsyncEvaluate(bool apply)
|
void QmakeProFile::applyAsyncEvaluate(bool apply)
|
||||||
@@ -1653,9 +1652,8 @@ bool sortByParserNodes(Node *a, Node *b)
|
|||||||
return a->filePath() < b->filePath();
|
return a->filePath() < b->filePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeProFile::applyEvaluate(QmakeEvalResult *evalResult)
|
void QmakeProFile::applyEvaluate(const QmakeEvalResultPtr &result)
|
||||||
{
|
{
|
||||||
QScopedPointer<QmakeEvalResult> result(evalResult);
|
|
||||||
if (!m_readerExact)
|
if (!m_readerExact)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1664,7 +1662,7 @@ void QmakeProFile::applyEvaluate(QmakeEvalResult *evalResult)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (const QString &error, evalResult->errors)
|
foreach (const QString &error, result->errors)
|
||||||
QmakeBuildSystem::proFileParseError(error, filePath());
|
QmakeBuildSystem::proFileParseError(error, filePath());
|
||||||
|
|
||||||
// we are changing what is executed in that case
|
// we are changing what is executed in that case
|
||||||
|
@@ -116,6 +116,7 @@ namespace Internal {
|
|||||||
Q_DECLARE_LOGGING_CATEGORY(qmakeNodesLog)
|
Q_DECLARE_LOGGING_CATEGORY(qmakeNodesLog)
|
||||||
class QmakeEvalInput;
|
class QmakeEvalInput;
|
||||||
class QmakeEvalResult;
|
class QmakeEvalResult;
|
||||||
|
using QmakeEvalResultPtr = std::shared_ptr<QmakeEvalResult>; // FIXME: Use unique_ptr once we require Qt 6
|
||||||
class QmakePriFileEvalResult;
|
class QmakePriFileEvalResult;
|
||||||
} // namespace Internal;
|
} // namespace Internal;
|
||||||
|
|
||||||
@@ -358,10 +359,11 @@ private:
|
|||||||
void setupReader();
|
void setupReader();
|
||||||
Internal::QmakeEvalInput evalInput() const;
|
Internal::QmakeEvalInput evalInput() const;
|
||||||
|
|
||||||
static Internal::QmakeEvalResult *evaluate(const Internal::QmakeEvalInput &input);
|
static Internal::QmakeEvalResultPtr evaluate(const Internal::QmakeEvalInput &input);
|
||||||
void applyEvaluate(Internal::QmakeEvalResult *parseResult);
|
void applyEvaluate(const Internal::QmakeEvalResultPtr &parseResult);
|
||||||
|
|
||||||
void asyncEvaluate(QFutureInterface<Internal::QmakeEvalResult *> &fi, Internal::QmakeEvalInput input);
|
void asyncEvaluate(QFutureInterface<Internal::QmakeEvalResultPtr> &fi,
|
||||||
|
Internal::QmakeEvalInput input);
|
||||||
void cleanupProFileReaders();
|
void cleanupProFileReaders();
|
||||||
|
|
||||||
void updateGeneratedFiles(const Utils::FilePath &buildDir);
|
void updateGeneratedFiles(const Utils::FilePath &buildDir);
|
||||||
@@ -400,7 +402,7 @@ private:
|
|||||||
QMap<QString, QStringList> m_wildcardDirectoryContents;
|
QMap<QString, QStringList> m_wildcardDirectoryContents;
|
||||||
|
|
||||||
// Async stuff
|
// Async stuff
|
||||||
QFutureWatcher<Internal::QmakeEvalResult *> *m_parseFutureWatcher = nullptr;
|
QFutureWatcher<Internal::QmakeEvalResultPtr> *m_parseFutureWatcher = nullptr;
|
||||||
QtSupport::ProFileReader *m_readerExact = nullptr;
|
QtSupport::ProFileReader *m_readerExact = nullptr;
|
||||||
QtSupport::ProFileReader *m_readerCumulative = nullptr;
|
QtSupport::ProFileReader *m_readerCumulative = nullptr;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user