Commit 3fcee08f authored by Sergey Ulanov's avatar Sergey Ulanov Committed by Commit Bot

Fix CommandBuffer vulkan handle leak in ExternalVkImageBacking

ExternalVkImageBacking was calling Initialize() for the command buffer
returned from VulkanCommandPool::CreatePrimaryCommandBuffer(), but
CreatePrimaryCommandBuffer() already calls Initialize(), i.e.
Initialize() was called twice, which means VkCommandBuffer was created
twice, while only second handle was freed in
VulkanCommandBuffer::Destroy(), the other one was leaked.

This change fixes the issue in ExternalVkImageBacking to avoid the
second Initialize() call. Also added a DCHECK() to avoid this problem in
the future.

Bug: 1001296
Change-Id: I043ddd53952a0650db5cd44835f8d4c244a6e722
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1792853
Commit-Queue: Sergey Ulanov <sergeyu@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
Auto-Submit: Sergey Ulanov <sergeyu@chromium.org>
Reviewed-by: default avatarPeng Huang <penghuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#694879}
parent 1c00e831
...@@ -784,7 +784,7 @@ bool ExternalVkImageBacking::WritePixels(size_t data_size, ...@@ -784,7 +784,7 @@ bool ExternalVkImageBacking::WritePixels(size_t data_size,
} }
auto command_buffer = command_pool_->CreatePrimaryCommandBuffer(); auto command_buffer = command_pool_->CreatePrimaryCommandBuffer();
CHECK(command_buffer->Initialize()); CHECK(command_buffer);
{ {
ScopedSingleUseCommandBufferRecorder recorder(*command_buffer); ScopedSingleUseCommandBufferRecorder recorder(*command_buffer);
GrVkImageInfo image_info; GrVkImageInfo image_info;
......
...@@ -114,6 +114,7 @@ bool VulkanCommandBuffer::Initialize() { ...@@ -114,6 +114,7 @@ bool VulkanCommandBuffer::Initialize() {
.commandBufferCount = 1, .commandBufferCount = 1,
}; };
DCHECK_EQ(static_cast<VkCommandBuffer>(VK_NULL_HANDLE), command_buffer_);
result = result =
vkAllocateCommandBuffers(device, &command_buffer_info, &command_buffer_); vkAllocateCommandBuffers(device, &command_buffer_info, &command_buffer_);
if (VK_SUCCESS != result) { if (VK_SUCCESS != result) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment