[FFmpeg-devel] [PATCH 3/5] avutil/hwcontext_vulkan: Fix leaks when semaphore creation fails

Zhao Zhili quinkblack at foxmail.com
Tue Feb 20 19:58:29 EET 2024


On 2024/2/21 01:10, Lynne wrote:
> Feb 20, 2024, 13:10 by quinkblack at foxmail.com:
>
>> From: Zhao Zhili <zhilizhao at tencent.com>
>>
>> ---
>>   libavutil/hwcontext_vulkan.c | 30 +++++++++++++++++++-----------
>>   1 file changed, 19 insertions(+), 11 deletions(-)
>>
>> diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
>> index a84713e621..c64094f31c 100644
>> --- a/libavutil/hwcontext_vulkan.c
>> +++ b/libavutil/hwcontext_vulkan.c
>> @@ -1807,23 +1807,30 @@ static void vulkan_frame_free(AVHWFramesContext *hwfc, AVVkFrame *f)
>>   VulkanDevicePriv *p = hwfc->device_ctx->internal->priv;
>>   FFVulkanFunctions *vk = &p->vkctx.vkfn;
>>   int nb_images = ff_vk_count_images(f);
>> +    int nb_sems = 0;
>> +
>> +    while (nb_sems < FF_ARRAY_ELEMS(f->sem) && f->sem[nb_sems])
>> +        nb_sems++;
>> +
>> +    if (nb_sems) {
>> +        VkSemaphoreWaitInfo sem_wait = {
>> +            .sType          = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
>> +            .flags          = 0x0,
>> +            .pSemaphores    = f->sem,
>> +            .pValues        = f->sem_value,
>> +            .semaphoreCount = nb_sems,
>> +        };
>>   
>> -    VkSemaphoreWaitInfo sem_wait = {
>> -        .sType          = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
>> -        .flags          = 0x0,
>> -        .pSemaphores    = f->sem,
>> -        .pValues        = f->sem_value,
>> -        .semaphoreCount = nb_images,
>> -    };
>> -
>> -    vk->WaitSemaphores(hwctx->act_dev, &sem_wait, UINT64_MAX);
>> +        vk->WaitSemaphores(hwctx->act_dev, &sem_wait, UINT64_MAX);
>> +    }
>>   
>>   vulkan_free_internal(f);
>>   
>>   for (int i = 0; i < nb_images; i++) {
>>   vk->DestroyImage(hwctx->act_dev,     f->img[i], hwctx->alloc);
>>   vk->FreeMemory(hwctx->act_dev,       f->mem[i], hwctx->alloc);
>> -        vk->DestroySemaphore(hwctx->act_dev, f->sem[i], hwctx->alloc);
>> +        if (f->sem[i])
>> +            vk->DestroySemaphore(hwctx->act_dev, f->sem[i], hwctx->alloc);
>>
> vkDestroySemaphore should already check for NULL, though?

Yes, the check before vkDestroySemaphore can be removed. Will update the 
patch.

> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".



More information about the ffmpeg-devel mailing list