From patchwork Tue Feb 20 12:08:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 46393 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dda5:b0:19e:cdac:8cce with SMTP id kw37csp1807033pzb; Tue, 20 Feb 2024 04:10:00 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXKdHTuS8LWb3I9zWeJ+eglGvN+el4lbKizCHoSFZVhI+jIfR3cEcqsa4b6d079Thg+ZT/9vGcgHlJr5BlOZAXSNQVQdqH1UWAkBA== X-Google-Smtp-Source: AGHT+IGY4ZII35rluOGXriMdf6DuECHdVezx0bwjf0ZUyV1t24/ThIBMQXaBcONpJlnSAmxb1k11 X-Received: by 2002:aa7:d746:0:b0:564:b823:a78 with SMTP id a6-20020aa7d746000000b00564b8230a78mr1633411eds.37.1708431000143; Tue, 20 Feb 2024 04:10:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1708431000; cv=none; d=google.com; s=arc-20160816; b=zp2gTscx47qbxDTui2OVTURG/RyNT1qUBiGDClg611SPyndTk26dcs3VS8MpMNzNCO yuffMJZVdqoTIOulI6NCVbMA/9xx4/Leb7Rqx+HOe5/aYxa5FSFey3OOOzDQT5lpRzjg Xnq/qN9PTkjGnwzsucS30vmKmGZZhKozmS3mQm9hqN8ariEt9JZ6xFIgp0LP4C65kYSV +8DuO9z3po1IgYj/LdIPcKME4jqZDc/TUxUvkUCFeLtRCJ/Y8qAhHhl/WIVwFpfktDPI TfV0yYJKUprWcMbkzQPMdK+ha7/8Yi51Y+QFKz9GlizBu8LANy3azl0m7qY1dfJOoEE1 Dn8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=d+Dx+QCAog2IJwXNbxNc8ty1vdrhubqd4lsVel2DA5U=; fh=HnHYuZ9XgUo86ZRXTLWWmQxhslYEI9B9taZ5X1DLFfc=; b=xU8jzgGkitpHb5g0CEVXplFE6+l59HPJAh0FDiIfHUHmi3y6vzuDBZFx8Ld/TxVM1G MoC0KCw9QTMwG2UeeGy8jksWKPXZKHHN5+sr/L0fRL8x1Mb01ylgujRoiQBw22BffYbI WP2Iwcx7Dt8pQVAP9/O0qeW6UE8Kz5SlDZiae+z1xGlafWvKdVf3rBpeUvihFMXk9bsm W0YJsOSyOYMbwQ5GwAuibeiVUTBBnicIAuDXTeOBJ4f9+pliSXW/1BQwvAnlKmFDsYxZ pn2x2hxp24HBRxWZuUnhRf+rQOsQdCr7eD8MNV2nVqw3XVxjW+uc2Yzf5svbFfV1wXjf /TWw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=aRvFuBz1; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id z92-20020a509e65000000b0056464ec848dsi2105477ede.251.2024.02.20.04.09.59; Tue, 20 Feb 2024 04:10:00 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=aRvFuBz1; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C448668D1C9; Tue, 20 Feb 2024 14:09:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-251-36.mail.qq.com (out203-205-251-36.mail.qq.com [203.205.251.36]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1840B68D09E for ; Tue, 20 Feb 2024 14:09:33 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1708430966; bh=53L3+rIGLLn0VkPWgExcH61MgB9tZapYqg9loGVM/CE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=aRvFuBz1mJShdWeAiT4mjrX4cjJ0shF6onqnaDhTk6aVLloRhPNx40EHOw4rw0EZj tbVTSO1Eb3slWeOUocTmUcSVVlvG2NgDV2kFckhoUZLITDmGDKCGdwu6vxAZTeR6cw j4yZ52/U1db7CB5v3g9JjKBPnAcdHQfhibJ+mckg= Received: from localhost.localdomain ([113.116.31.63]) by newxmesmtplogicsvrszc5-0.qq.com (NewEsmtp) with SMTP id 2413D432; Tue, 20 Feb 2024 20:09:01 +0800 X-QQ-mid: xmsmtpt1708430942t8bsvzjyf Message-ID: X-QQ-XMAILINFO: MFdGPHhuqhNo0U/b5FZDBdLBY2ZN+/mAUtfTwZgKgBDhrMu0BiGEn3rNEznWk5 gv7wrKo4IXAQGMLvYFj09w85TJY3iWeeKhxjfPSG58Nna8kl/8e5NW9SqdIHY5mVu4yMkTIjr5AP wdKRqnDN6DWe2MxRW+ucl0fgcpuxpXQKxRBZJpuh4JjaEtgjKEjuRDrkuX75YX3oHCDbcnaDzGfV oXs5rUItW8nFvcAQcGpd97UkvH/onEB5ZVKhqFHYakJyWP/hS9rJFmc/JEH3u5BY9P0s5CbjoyWx 8CFXm7gZ112fFHJkcH+AAQzpMPzACgJmT2gMOG1a2qG5Vtp33bWtWYx54gR5azLETFjZTmLOyGef Cr9hcmK99wrCeLGIisDU4eMHp/N8z8EzH3TLKGSOM8+buBzQ0CO8AbUFnigJHoaDJRUoBxQQEJWw UhdtDE8ViSdpnWoX43WyNtO8drkU3mOZ6yAb+TvNCowfpOD6wQL3e5Zk9W0A3JzIlhG4NAcB5kV4 6esHU1q9eLQOUMsqvC953hgd3WSdfDLISPZmlbnA7/ZDlGvWPE0mNXiq9yyqo0PbOnWi4K9J1C+o NZ3/r0mUHwYN7rUADYlMP8a3QHsWaTFFWvPSjT62+Tsag1EDXBFRNXQh91GRy9969KKZnZbiRuR9 PnGxDi4YQdViEbzW2nWRi1PUoB/2xmAM6S7jcgcw/CdFJZIitI4dvUYEl6ha3Yioiv0r3y24roMx VjATdIN/pT7rb6acAH5mjNoP9L59bXOIsL1XC/StDmF+YBv7Pg1zi/NxPH8JAtOGxSQkh2GBv342 a/Px5Kg2w9VnU0SO5mei5x0xdOxC/AEUjeKTh41BnvahaGqIYI+a7tsE2j7NTEHl6/fQTiyiXGTE k/5Y/i2Z39X105fDnr0xv4jVdwFBkojA9bi2MCCQ+NHc2FME0V5OR0wTRlv2j5QMBIGGxxzZv5VE NKLCNT2Rg8+yk1bd5JKRX/s+6DdxS8JwGmcMV3GFiunyjxYCWtS4Rq5I5mpb94 X-QQ-XMRINFO: NI4Ajvh11aEj8Xl/2s1/T8w= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Feb 2024 20:08:56 +0800 X-OQ-MSGID: <20240220120858.317766-3-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240220120858.317766-1-quinkblack@foxmail.com> References: <20240220120858.317766-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avutil/hwcontext_vulkan: Fix leaks when semaphore creation fails X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: CWl5QVLaMtDu From: Zhao Zhili --- 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); } av_free(f); @@ -2098,7 +2105,8 @@ static int create_frame(AVHWFramesContext *hwfc, AVVkFrame **frame, 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; } f->queue_family[i] = p->nb_img_qfs > 1 ? VK_QUEUE_FAMILY_IGNORED : p->img_qfs[0];