diff options
| author | Christian Kandeler <christian.kandeler@digia.com> | 2013-09-09 13:34:01 +0200 |
|---|---|---|
| committer | Christian Kandeler <christian.kandeler@digia.com> | 2013-09-09 14:05:10 +0200 |
| commit | ff5b33b82b8ae27ba8851f8c9f618ab983e03f06 (patch) | |
| tree | bcff234b028132e3ba5990a0cb9f908ddab71e9e /src/lib/buildgraph | |
| parent | bf1b99d7ab0a423d063ef39332e078e1cb09fdf2 (diff) | |
| download | qbs-ff5b33b82b8ae27ba8851f8c9f618ab983e03f06.tar.gz | |
Fix artifact leaks in build graph loader and automoc.
Change-Id: I989d88c58586ab9b6fe9f7870432f7266a00b9cc
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/buildgraph')
| -rw-r--r-- | src/lib/buildgraph/automoc.cpp | 1 | ||||
| -rw-r--r-- | src/lib/buildgraph/buildgraphloader.cpp | 2 | ||||
| -rw-r--r-- | src/lib/buildgraph/projectbuilddata.cpp | 8 | ||||
| -rw-r--r-- | src/lib/buildgraph/projectbuilddata.h | 2 |
4 files changed, 8 insertions, 5 deletions
diff --git a/src/lib/buildgraph/automoc.cpp b/src/lib/buildgraph/automoc.cpp index 40c798962..0e436923c 100644 --- a/src/lib/buildgraph/automoc.cpp +++ b/src/lib/buildgraph/automoc.cpp @@ -312,6 +312,7 @@ void AutoMoc::unmoc(Artifact *artifact, const FileTag &mocFileTag) << relativeArtifactFileName(mocObjArtifact); } project->buildData->removeArtifact(mocObjArtifact, m_logger); + delete mocObjArtifact; } } diff --git a/src/lib/buildgraph/buildgraphloader.cpp b/src/lib/buildgraph/buildgraphloader.cpp index 76ee12626..8be8adee2 100644 --- a/src/lib/buildgraph/buildgraphloader.cpp +++ b/src/lib/buildgraph/buildgraphloader.cpp @@ -412,7 +412,7 @@ void BuildGraphLoader::onProductRemoved(const ResolvedProductPtr &product, if (product->buildData) { foreach (Artifact *artifact, product->buildData->artifacts) { projectBuildData->removeArtifact(artifact, projectBuildData, m_logger, - removeArtifactsFromDisk); + removeArtifactsFromDisk, false); } } } diff --git a/src/lib/buildgraph/projectbuilddata.cpp b/src/lib/buildgraph/projectbuilddata.cpp index 73478f25d..927807d55 100644 --- a/src/lib/buildgraph/projectbuilddata.cpp +++ b/src/lib/buildgraph/projectbuilddata.cpp @@ -142,16 +142,18 @@ static void disconnectArtifact(Artifact *artifact, ProjectBuildData *projectBuil } void ProjectBuildData::removeArtifact(Artifact *artifact, ProjectBuildData *projectBuildData, - const Logger &logger, bool removeFromDisk) + const Logger &logger, bool removeFromDisk, bool removeFromProduct) { if (logger.traceEnabled()) logger.qbsTrace() << "[BG] remove artifact " << relativeArtifactFileName(artifact); if (removeFromDisk) removeGeneratedArtifactFromDisk(artifact, logger); - artifact->product->buildData->artifacts.remove(artifact); removeFromLookupTable(artifact); - artifact->product->buildData->targetArtifacts.remove(artifact); + if (removeFromProduct) { + artifact->product->buildData->artifacts.remove(artifact); + artifact->product->buildData->targetArtifacts.remove(artifact); + } disconnectArtifact(artifact, projectBuildData, logger); projectBuildData->artifactsThatMustGetNewTransformers -= artifact; isDirty = true; diff --git a/src/lib/buildgraph/projectbuilddata.h b/src/lib/buildgraph/projectbuilddata.h index bf1496a4a..a51beb96c 100644 --- a/src/lib/buildgraph/projectbuilddata.h +++ b/src/lib/buildgraph/projectbuilddata.h @@ -65,7 +65,7 @@ public: void updateNodesThatMustGetNewTransformer(const Logger &logger); void removeArtifact(Artifact *artifact, const Logger &logger); void removeArtifact(Artifact *artifact, ProjectBuildData *projectBuildData, - const Logger &logger, bool removeFromDisk = true); + const Logger &logger, bool removeFromDisk = true, bool removeFromProduct = true); QSet<FileDependency *> fileDependencies; RulesEvaluationContextPtr evaluationContext; |
