From afe55da595c51371ecb0bc946612f1e16b5cc45e Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Fri, 20 Oct 2023 17:19:24 -0700 Subject: [PATCH] [Impeller] Fix cmd pool reset from background thread. (flutter/engine#47184) Make sure to clear the buffers before assigning to the recycler, as the dtor was racing with the raster thread usage. --- .../impeller/renderer/backend/vulkan/command_pool_vk.cc | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/engine/src/flutter/impeller/renderer/backend/vulkan/command_pool_vk.cc b/engine/src/flutter/impeller/renderer/backend/vulkan/command_pool_vk.cc index 9d6f70d4ee..05354271b7 100644 --- a/engine/src/flutter/impeller/renderer/backend/vulkan/command_pool_vk.cc +++ b/engine/src/flutter/impeller/renderer/backend/vulkan/command_pool_vk.cc @@ -40,6 +40,7 @@ class BackgroundCommandPoolVK final { if (!recycler) { return; } + buffers_.clear(); recycler->Reclaim(std::move(pool_)); } @@ -56,8 +57,6 @@ class BackgroundCommandPoolVK final { std::weak_ptr recycler_; }; -static bool kResetOnBackgroundThread = false; - CommandPoolVK::~CommandPoolVK() { if (!pool_) { return; @@ -75,10 +74,8 @@ CommandPoolVK::~CommandPoolVK() { auto reset_pool_when_dropped = BackgroundCommandPoolVK( std::move(pool_), std::move(collected_buffers_), recycler); - if (kResetOnBackgroundThread) { - UniqueResourceVKT pool( - context->GetResourceManager(), std::move(reset_pool_when_dropped)); - } + UniqueResourceVKT pool( + context->GetResourceManager(), std::move(reset_pool_when_dropped)); } // TODO(matanlurey): Return a status_or<> instead of {} when we have one.