From 24cebf5cc5f57d962afd0d7caa30e6a4044c9f39 Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Wed, 16 Jun 2021 09:46:36 +0200 Subject: [PATCH] common: fix a memory leak after scene->clear(true) If renderer was null, paints was cleared (count set to zero), but data was not deleted regardless free boolean. --- src/lib/tvgSceneImpl.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/lib/tvgSceneImpl.h b/src/lib/tvgSceneImpl.h index f53fec62..9c6c56f3 100644 --- a/src/lib/tvgSceneImpl.h +++ b/src/lib/tvgSceneImpl.h @@ -173,17 +173,19 @@ struct Scene::Impl void clear(bool free) { //Clear render target before drawing - if (!renderer || !renderer->clear()) { - paints.clear(); - return; + if (renderer && renderer->clear()) { + for (auto paint = paints.data; paint < (paints.data + paints.count); ++paint) { + (*paint)->pImpl->dispose(*renderer); + } + renderer = nullptr; } //free paints - for (auto paint = paints.data; paint < (paints.data + paints.count); ++paint) { - (*paint)->pImpl->dispose(*renderer); - if (free) delete(*paint); + if (free) { + for (auto paint = paints.data; paint < (paints.data + paints.count); ++paint) { + delete(*paint); + } } paints.clear(); - renderer = nullptr; } };