From e954e2f689b4e1dbcbfd195eeff6e884d2ba2c68 Mon Sep 17 00:00:00 2001 From: freiling Date: Fri, 2 Jun 2017 16:31:39 -0700 Subject: [PATCH] [MA-225][DNO-95] remove message loop handlers when destroying VulkanSurfaceProducer to avoid callbacks on deleted pointers (#3733) --- content_handler/vulkan_rasterizer.cc | 6 ++++++ content_handler/vulkan_rasterizer.h | 1 + 2 files changed, 7 insertions(+) diff --git a/content_handler/vulkan_rasterizer.cc b/content_handler/vulkan_rasterizer.cc index afbd19f64..14830a5f5 100644 --- a/content_handler/vulkan_rasterizer.cc +++ b/content_handler/vulkan_rasterizer.cc @@ -52,6 +52,12 @@ VulkanRasterizer::VulkanSurfaceProducer::VulkanSurfaceProducer() { FTL_LOG(ERROR) << "VulkanSurfaceProducer failed to initialize"; } +VulkanRasterizer::VulkanSurfaceProducer::~VulkanSurfaceProducer() { + for (auto &surface_info : pending_surfaces_) + mtl::MessageLoop::GetCurrent()->RemoveHandler( + surface_info.second.handler_key); +} + std::unique_ptr VulkanRasterizer::VulkanSurfaceProducer::CreateSurface(uint32_t width, uint32_t height) { diff --git a/content_handler/vulkan_rasterizer.h b/content_handler/vulkan_rasterizer.h index 8cd7d5ca9..6263fb6a9 100644 --- a/content_handler/vulkan_rasterizer.h +++ b/content_handler/vulkan_rasterizer.h @@ -39,6 +39,7 @@ class VulkanRasterizer : public Rasterizer { private mtl::MessageLoopHandler { public: VulkanSurfaceProducer(); + ~VulkanSurfaceProducer() override; sk_sp ProduceSurface(SkISize size, mozart::ImagePtr* out_image) override;