summaryrefslogtreecommitdiff
path: root/libs/hwui/renderthread/VulkanManager.cpp
diff options
context:
space:
mode:
authorGreg Daniel <egdaniel@google.com>2021-07-15 13:38:44 -0400
committerGreg Daniel <egdaniel@google.com>2021-07-15 13:38:44 -0400
commite8dc397bfd169e5f6baa252b660cf3c1518d9004 (patch)
tree3bce46eb41924c5cbdc5b154d34769337bb1ee5c /libs/hwui/renderthread/VulkanManager.cpp
parent69a09397647eabe8cab888186963560726f984ad (diff)
In VuklanManager make sure we have a valid semaphore context before destroying it.
If errors occured during finishFrame that caused us to not have a semaphore or possibly destroy the semaphore early we will end up with a null mDestroySemaphoreContext in swapBuffers which we tried to destroy unconditionally. I haven't repro'd the connected bug, but based on the crash stack this seems like the likely cause. Test: manual code inspection and build. Bug: 191950033 Change-Id: I0fbd33edff3552b91b980da9e3b2c45bc52a2dd0
Diffstat (limited to 'libs/hwui/renderthread/VulkanManager.cpp')
-rw-r--r--libs/hwui/renderthread/VulkanManager.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index f70149111116..9e8a1e141fe1 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -579,7 +579,9 @@ void VulkanManager::swapBuffers(VulkanSurface* surface, const SkRect& dirtyRect)
std::lock_guard<std::mutex> lock(mGraphicsQueueMutex);
mQueueWaitIdle(mGraphicsQueue);
}
- destroy_semaphore(mDestroySemaphoreContext);
+ if (mDestroySemaphoreContext) {
+ destroy_semaphore(mDestroySemaphoreContext);
+ }
surface->presentCurrentBuffer(dirtyRect, fenceFd);
mSwapSemaphore = VK_NULL_HANDLE;