From 4bdd40c12364b11e425ffb9904fd75d591dc7dfb Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Sun, 22 Dec 2019 17:28:33 +0200 Subject: Use RAII for memory management of jobs QMap::keys() method allocates memory for a new list which is not desired during the object destruction. Also simplifies dtor and make code more exception-safe Change-Id: Ib76c2426e74ca79e2ab56b993007985ba8999c85 Reviewed-by: Christian Kandeler --- src/lib/corelib/buildgraph/executor.cpp | 12 +++++------- src/lib/corelib/buildgraph/executor.h | 1 + src/lib/corelib/buildgraph/executorjob.h | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) (limited to 'src/lib') diff --git a/src/lib/corelib/buildgraph/executor.cpp b/src/lib/corelib/buildgraph/executor.cpp index 6e2e7a556..377222d21 100644 --- a/src/lib/corelib/buildgraph/executor.cpp +++ b/src/lib/corelib/buildgraph/executor.cpp @@ -102,12 +102,8 @@ Executor::Executor(Logger logger, QObject *parent) Executor::~Executor() { - // jobs must be destroyed before deleting the shared scan result cache - for (ExecutorJob *job : qAsConst(m_availableJobs)) - delete job; - const auto processingJobs = m_processingJobs.keys(); - for (ExecutorJob *job : processingJobs) - delete job; + // jobs must be destroyed before deleting the m_inputArtifactScanContext + m_allJobs.clear(); delete m_inputArtifactScanContext; delete m_productInstaller; } @@ -769,9 +765,11 @@ void Executor::addExecutorJobs() { const int count = m_buildOptions.maxJobCount(); qCDebug(lcExec) << "preparing executor for" << count << "jobs in parallel"; + m_allJobs.reserve(count); m_availableJobs.reserve(count); for (int i = 1; i <= count; i++) { - const auto job = new ExecutorJob(m_logger, this); + m_allJobs.push_back(std::make_unique(m_logger)); + const auto job = m_allJobs.back().get(); job->setMainThreadScriptEngine(m_evalContext->engine()); job->setObjectName(QStringLiteral("J%1").arg(i)); job->setDryRun(m_buildOptions.dryRun()); diff --git a/src/lib/corelib/buildgraph/executor.h b/src/lib/corelib/buildgraph/executor.h index 460f46959..cc879e125 100644 --- a/src/lib/corelib/buildgraph/executor.h +++ b/src/lib/corelib/buildgraph/executor.h @@ -166,6 +166,7 @@ private: BuildOptions m_buildOptions; Logger m_logger; ProgressObserver *m_progressObserver; + std::vector> m_allJobs; QList m_availableJobs; ExecutorState m_state; TopLevelProjectPtr m_project; diff --git a/src/lib/corelib/buildgraph/executorjob.h b/src/lib/corelib/buildgraph/executorjob.h index bc8954072..1f8f0cd73 100644 --- a/src/lib/corelib/buildgraph/executorjob.h +++ b/src/lib/corelib/buildgraph/executorjob.h @@ -65,7 +65,7 @@ class ExecutorJob : public QObject { Q_OBJECT public: - ExecutorJob(const Logger &logger, QObject *parent); + explicit ExecutorJob(const Logger &logger, QObject *parent = nullptr); ~ExecutorJob() override; void setMainThreadScriptEngine(ScriptEngine *engine); -- cgit v1.2.3