summaryrefslogtreecommitdiff
path: root/src/lib/buildgraph
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2013-09-09 13:34:01 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2013-09-09 14:05:10 +0200
commitff5b33b82b8ae27ba8851f8c9f618ab983e03f06 (patch)
treebcff234b028132e3ba5990a0cb9f908ddab71e9e /src/lib/buildgraph
parentbf1b99d7ab0a423d063ef39332e078e1cb09fdf2 (diff)
downloadqbs-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.cpp1
-rw-r--r--src/lib/buildgraph/buildgraphloader.cpp2
-rw-r--r--src/lib/buildgraph/projectbuilddata.cpp8
-rw-r--r--src/lib/buildgraph/projectbuilddata.h2
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;