sw_engine: flush all processing data when clear() is requested. 87/237387/1
authorHermet Park <chuneon.park@samsung.com>
Tue, 30 Jun 2020 03:38:01 +0000 (12:38 +0900)
committerHermet Park <chuneon.park@samsung.com>
Tue, 30 Jun 2020 03:38:01 +0000 (12:38 +0900)
there was a missing point which occured corrupted data in multi-processing.

Change-Id: Ifb28ee82852e488d23d45b4b75f0a6c70bb428b2

src/lib/sw_engine/tvgSwRenderer.cpp

index ac5464e..4f09c60 100644 (file)
@@ -47,16 +47,16 @@ static RenderInitializer renderInit;
 
 SwRenderer::~SwRenderer()
 {
-    if (progress.valid()) progress.get();
+    flush();
 }
 
 
 bool SwRenderer::clear()
 {
-    if (progress.valid()) return false;
-    return true;
+    return flush();
 }
 
+
 bool SwRenderer::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h)
 {
     if (!buffer || stride == 0 || w == 0 || h == 0) return false;
@@ -117,11 +117,15 @@ void SwRenderer::doRender()
 
 bool SwRenderer::flush()
 {
-    if (progress.valid()) {
-        progress.get();
-        return true;
+    while (prepareTasks.size() > 0) {
+        auto task = prepareTasks.front();
+        if (task->progress.valid()) task->progress.get();
+        prepareTasks.pop();
     }
-    return false;
+
+    if (progress.valid()) progress.get();
+
+    return true;
 }