diff mbox series

[FFmpeg-devel,4/5] avutil/hwcontext_vulkan: Fix leaks in map_from_drm

Message ID tencent_9C9A9F40DA9A2A9F4CAB9E4E2770522D5908@qq.com
State Accepted
Commit 03275b0f093291542799ac6dbc9929dbb4d405bf
Headers show
Series [FFmpeg-devel,1/5] avutil/hwcontext: Don't assume device_uninit is reentrant | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Zhao Zhili Feb. 20, 2024, 12:08 p.m. UTC
From: Zhao Zhili <zhilizhao@tencent.com>

Also simplify error handing.
---
This patch is untested since I don't have a proper device.

 libavutil/hwcontext_vulkan.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)
diff mbox series

Patch

diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
index c64094f31c..35a7d75cce 100644
--- a/libavutil/hwcontext_vulkan.c
+++ b/libavutil/hwcontext_vulkan.c
@@ -2633,7 +2633,8 @@  static int vulkan_map_from_drm_frame_desc(AVHWFramesContext *hwfc, AVVkFrame **f
         if (ret != VK_SUCCESS) {
             av_log(hwctx, AV_LOG_ERROR, "Failed to create semaphore: %s\n",
                    ff_vk_ret2str(ret));
-            return AVERROR_EXTERNAL;
+            err = AVERROR_EXTERNAL;
+            goto fail;
         }
 
         /* We'd import a semaphore onto the one we created using
@@ -2752,14 +2753,7 @@  static int vulkan_map_from_drm_frame_desc(AVHWFramesContext *hwfc, AVVkFrame **f
     return 0;
 
 fail:
-    for (int i = 0; i < desc->nb_layers; i++) {
-        vk->DestroyImage(hwctx->act_dev, f->img[i], hwctx->alloc);
-        vk->DestroySemaphore(hwctx->act_dev, f->sem[i], hwctx->alloc);
-    }
-    for (int i = 0; i < desc->nb_objects; i++)
-        vk->FreeMemory(hwctx->act_dev, f->mem[i], hwctx->alloc);
-
-    av_free(f);
+    vulkan_frame_free(hwfc, f);
 
     return err;
 }