diff options
| author | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-05-26 11:08:39 +0200 |
|---|---|---|
| committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-05-26 09:09:37 +0000 |
| commit | a3401e272d50ba11a394b7adf40c82a2463b603b (patch) | |
| tree | 69f3d911b8d65dd6486e2ae1c4dfa6d5809d59b9 | |
| parent | 9c87f6965b450ba6eb1c09a9510e7408d580b19a (diff) | |
| download | qt-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.cpp | 19 |
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(); |
