From 342ff58cbebf591380d5a038c1f37c2455cef825 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Wed, 2 Apr 2025 22:23:21 +0800 Subject: [PATCH] finish all pending tasks before joining RenderThread on destruction --- thermion_dart/native/src/rendering/RenderThread.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/thermion_dart/native/src/rendering/RenderThread.cpp b/thermion_dart/native/src/rendering/RenderThread.cpp index 30244ddd..e572d591 100644 --- a/thermion_dart/native/src/rendering/RenderThread.cpp +++ b/thermion_dart/native/src/rendering/RenderThread.cpp @@ -20,10 +20,18 @@ RenderThread::RenderThread() RenderThread::~RenderThread() { - TRACE("Destroying RenderThread"); + Log("Destroying RenderThread (%d tasks remaining)", _tasks.size()); _stop = true; _cv.notify_one(); TRACE("Joining RenderThread thread.."); + + while (!_tasks.empty()) + { + auto task = std::move(_tasks.front()); + _tasks.pop_front(); + task(); + } + t->join(); delete t; @@ -78,6 +86,7 @@ void RenderThread::iter() _cv.wait_for(taskLock, std::chrono::microseconds(2000), [this] { return !_tasks.empty() || _stop; }); + }