sw_engine renderer: fix memory leak.

prepared compositors can be dangled if the rendering is not occured.

free them by doubl-checking in the destructor.

@Issue: https://github.com/Samsung/thorvg/issues/547
This commit is contained in:
Hermet Park 2021-07-08 20:20:49 +09:00 committed by Hermet Park
parent 30f4beacf5
commit 7bf6f97691
2 changed files with 9 additions and 4 deletions

View file

@ -230,6 +230,7 @@ static void _termEngine()
SwRenderer::~SwRenderer()
{
clear();
clearCompositors();
if (surface) delete(surface);
@ -304,11 +305,8 @@ bool SwRenderer::preRender()
return rasterClear(surface);
}
bool SwRenderer::postRender()
void SwRenderer::clearCompositors()
{
tasks.clear();
//Free Composite Caches
for (auto comp = compositors.data; comp < (compositors.data + compositors.count); ++comp) {
free((*comp)->compositor->image.data);
@ -316,7 +314,13 @@ bool SwRenderer::postRender()
delete(*comp);
}
compositors.reset();
}
bool SwRenderer::postRender()
{
tasks.clear();
clearCompositors();
return true;
}

View file

@ -54,6 +54,7 @@ public:
Compositor* target(const RenderRegion& region) override;
bool beginComposite(Compositor* cmp, CompositeMethod method, uint32_t opacity) override;
bool endComposite(Compositor* cmp) override;
void clearCompositors();
static SwRenderer* gen();
static bool init(uint32_t threads);