summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-05-26 11:08:39 +0200
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-05-26 09:09:37 +0000
commita3401e272d50ba11a394b7adf40c82a2463b603b (patch)
tree69f3d911b8d65dd6486e2ae1c4dfa6d5809d59b9
parent9c87f6965b450ba6eb1c09a9510e7408d580b19a (diff)
downloadqt-creator-a3401e272d50ba11a394b7adf40c82a2463b603b.tar.gz
CodeModelBackEnd: Fix memory leak in ProjectPart
Change-Id: I0fcb947eeaa8b5a953ec6bed5616baf31d78caad Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
-rw-r--r--src/tools/codemodelbackend/ipcsource/projectpart.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/tools/codemodelbackend/ipcsource/projectpart.cpp b/src/tools/codemodelbackend/ipcsource/projectpart.cpp
index fedbd3026f..d4ee4a1797 100644
--- a/src/tools/codemodelbackend/ipcsource/projectpart.cpp
+++ b/src/tools/codemodelbackend/ipcsource/projectpart.cpp
@@ -41,6 +41,10 @@ namespace CodeModelBackEnd {
class ProjectPartData {
public:
ProjectPartData(const Utf8String &projectPartId);
+ ~ProjectPartData();
+
+public:
+ void clearArguments();
public:
time_point lastChangeTimePoint;
@@ -48,12 +52,25 @@ public:
Utf8String projectPartId;
};
+void ProjectPartData::clearArguments()
+{
+ for (auto argument : arguments)
+ delete [] argument;
+
+ arguments.clear();
+}
+
ProjectPartData::ProjectPartData(const Utf8String &projectPartId)
: lastChangeTimePoint(std::chrono::steady_clock::now()),
projectPartId(projectPartId)
{
}
+ProjectPartData::~ProjectPartData()
+{
+ clearArguments();
+}
+
ProjectPart::ProjectPart(const Utf8String &projectPartId)
: d(std::make_shared<ProjectPartData>(projectPartId))
{
@@ -66,7 +83,6 @@ ProjectPart::ProjectPart(const ProjectPartContainer &projectContainer)
}
ProjectPart::~ProjectPart() = default;
-
ProjectPart::ProjectPart(const ProjectPart &) = default;
ProjectPart &ProjectPart::operator =(const ProjectPart &) = default;
@@ -102,6 +118,7 @@ static const char *strdup(const Utf8String &utf8String)
void ProjectPart::setArguments(const Utf8StringVector &arguments)
{
+ d->clearArguments();
d->arguments.resize(arguments.size());
std::transform(arguments.cbegin(), arguments.cend(), d->arguments.begin(), strdup);
updateLastChangeTimePoint();