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.
This commit is contained in:
Michal Maciola 2021-06-16 09:46:36 +02:00 committed by Hermet Park
parent 0df8c00519
commit 24cebf5cc5

View file

@ -173,17 +173,19 @@ struct Scene::Impl
void clear(bool free) void clear(bool free)
{ {
//Clear render target before drawing //Clear render target before drawing
if (!renderer || !renderer->clear()) { if (renderer && renderer->clear()) {
paints.clear();
return;
}
//free paints
for (auto paint = paints.data; paint < (paints.data + paints.count); ++paint) { for (auto paint = paints.data; paint < (paints.data + paints.count); ++paint) {
(*paint)->pImpl->dispose(*renderer); (*paint)->pImpl->dispose(*renderer);
if (free) delete(*paint); }
renderer = nullptr;
}
//free paints
if (free) {
for (auto paint = paints.data; paint < (paints.data + paints.count); ++paint) {
delete(*paint);
}
} }
paints.clear(); paints.clear();
renderer = nullptr;
} }
}; };