From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id B7F214755C for ; Thu, 12 Oct 2023 14:09:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 55E4868C9C1; Thu, 12 Oct 2023 17:09:07 +0300 (EEST) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2018.outbound.protection.outlook.com [40.92.75.18]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DD46F68C99B for ; Thu, 12 Oct 2023 17:09:00 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q50axxm4ZLs4MfyxU/iVZxQ4PncGJ+6I+xrAue+sKKgEUivv3wFDmdYmONEi1+wHHN5JY+fgc222L6QMIAmMeQNcLKs0ZNGFd9Gz3Nc50fn8amHnAKSnyhqj/J/u5DdUA0FpLkvWmeeEbg4NIQUJP3c3mE6zBA+Fb20kGYcRTUoHoh+mb075Yd6e8BfgkgysTday6T8swMOXUM5LE1sb5xsTXI0yUX9D/AdRcUYIpboafcd7ooKH5m5qhoEYK+6wHXN1GPHN7Ne35IjvBxRGlDICO4YQOn+8+qZCgM4IkoRvdT1yRaWI1TvsKTXqbWE3qsKigPVz8Vn0i7oYOCimag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0W3WccnKwXnmcrxZjieN6ufhdovTnd3cZd1gGlr25KY=; b=iHmeco+94tZFkS0ce0eEtnI+70axZUcGjTNCYXVhVDOcL0nwrEW92snXVZDg2NEIBoQpGHH5NfRQN8ojfj0JZlDZXKetYuIDwWu+G3Oy6uwefCgHMwtVEMtsDdU+ZL9lNav2kJ+IRCBB8e//KCPJMKoi1kM57JnAVioZnTZK1GYU+VkRWR8+2IuLVw/FtBL8ZylWPIzPX37j9oQg0WOU93FfyB5QI1MSrJtmGs4wxQXyB+FkqSaYunhA1uPevj2UgPgMza7RGT0nYaimlqQqEWI2TKcFAoo/TBJj8FdPLbMwEJcO92dXJX5znt5vPZeVZDtoRs0a5uFxUO1g0ysxBg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0W3WccnKwXnmcrxZjieN6ufhdovTnd3cZd1gGlr25KY=; b=Q5QiMbicj3DlQpi8sPYUwXk5hqTB0whmgIz0gz5jb31fcXbhWeIIueCGF4eEpaAjZSpaQIdos0kzHh7/mhYw+NnGR6dV2BOfFhsapAiYE/sYzahegF5w/1dVn5MMa97596MnwgrLehaz5DB9jAfR+SMKIj6BzyqShsJWvlFa0x2lp0TSViyh2AislKGGpZQ1g/OXtaIpf/pmr34HIM3RnmXgJZb7vg/QqbpSSWQQ+AhEtd56GOzHk2OOCOdeyAg2u/YClUyQIFTlO+Pa7HuBMZcTkojUgv9IExVyUEsy94g15RnsMxP5LLQ84Utnoi1LzD9klw7IAudinkBFDUz8Zw== Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) by DU2P250MB0238.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:277::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.45; Thu, 12 Oct 2023 14:08:59 +0000 Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM ([fe80::ec5a:5f06:b873:e81b]) by DU0P250MB0747.EURP250.PROD.OUTLOOK.COM ([fe80::ec5a:5f06:b873:e81b%4]) with mapi id 15.20.6863.043; Thu, 12 Oct 2023 14:08:59 +0000 Message-ID: Date: Thu, 12 Oct 2023 16:10:13 +0200 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <169711587240.32606.8092556431828354289@lain.khirnov.net> <169711949127.32606.4880530769811767953@lain.khirnov.net> From: Andreas Rheinhardt In-Reply-To: <169711949127.32606.4880530769811767953@lain.khirnov.net> X-TMN: [OktbxiMOy56/0LBY/tHLQUEQzRiwT+3qOw2b0UaZHlo=] X-ClientProxiedBy: FR2P281CA0022.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::9) To DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) X-Microsoft-Original-Message-ID: <16435d47-d33b-4053-b9b5-dd0e4fe85be9@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0P250MB0747:EE_|DU2P250MB0238:EE_ X-MS-Office365-Filtering-Correlation-Id: 58e97659-bd5f-4245-e8b1-08dbcb2cc747 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: v9Nwtvce4uss4VppCKrxJWrP/fb1bbDPEnt87jPd1V1aDPklHpUTKpvO5CsWcbzWE1vYK3wHjUGUvzDsK+CAtT1a43NJd5NhVN2JLoy2WETu8gukb70mAZwi06Q3CAajixqoEVA+hNZJCZCxmqKM/XMSNrrk1oSlES4WXCbYhYnPZfImq1iP6v2vWgGNpn4URo7bSiBiCcz2IKV8NMhtF4jPl8oEf0Tbf9DGl7c0xKJt94D3LpGpwRPBSzVfrDEN4lqzd/t5e9XLkxy5efScji0iWfPM3hHvZs26o0AcXixEZPb196M7Dn0qgc/Ugpgz25hroxjeL5xUGYt7kYV2vc538cympK8vB9sNYdjA3/R/e4L885bfzjAh+gJPUrrrU34jF3tAE2KZLaK6TIvSBbkcZB79XzT6AHO4X7IWcHTK+c1RTMQ2p6W3WJ+BEIRMFqRZtsrXy5Bd2l5e7jctWOaaNmCrBNkR8ogqXad89EgC02AC/IV9z7cyacSOA2CraZA6faLpUR4aFDeNnSsZ1vyuW9mONZMPvTWeSGu65AvlvkTpsP8YlhhJJj3VBxzB X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dTRsdjd0dlBzeGZyOEs1OVcyd3JkQkx0MHFWMzlWNkNvcjJSc1doU2hKRjA0?= =?utf-8?B?Wi9TWDJpTExtOUpoNTNvcjY3ekhlRDg0SUtLenFUcUhCd0hZdUJhRXExZTc1?= =?utf-8?B?QkFBNmcyZXl1cWZEZWVHNHNqQlBZUnkzZkUwem5WOGhvVEg4WTNKSEtNbzR2?= =?utf-8?B?ZWM1Tmw0ajVFUW9tZEdTN3FKUit6dXFOaitUY1FvaXNhYWg1b1NidW40b0dU?= =?utf-8?B?NE5SNW9HMGVXdUNxZmRxdTNHWGFicTlNUFUyY2Fqak95YzRpTmtlOG9Ma3Nm?= =?utf-8?B?d3p5dTJKWStiMi8xQ3ZIaFVWQlRObGQ1VzFBcGlWSHg5UmdET01JcFVLQkZP?= =?utf-8?B?alhzRFNOSzJQN05zWS9nLy9ZT0xRUGRpaTBuOVc0aUx0aW1aQk9STitTb0VD?= =?utf-8?B?YTBZWUFwSHlQVXJvWC9QOG5Dc3ZyMmJtZWd2TUszenpqZTJZcTYySmFkcnE5?= =?utf-8?B?eFdsK0dvWU8yRUQ1cTZUNERYY05XdjlyaUJOR2s0NUxHWWZpRGVkY1J2c0g1?= =?utf-8?B?cDZmZ3hVU3QrQUJHVUVNZzYxb05RMjVlcHlxeExBSHUyTjd4U2hDa2xPT1FO?= =?utf-8?B?bUZWVmZ6d2pkcWFZdzJZRWN4VnVaZmx5eXBIb3FIamFLMXFJbm43VzNPQ3c1?= =?utf-8?B?c1ZNY24vaFk4M0o1ZC9HWkgrSGVGUnpTdmhFbGNmMnVMVHMwczEvL0ZJdEln?= =?utf-8?B?Zlc1Wk8ySGkyUzErV3hGcW9ZdVRPWGR5SGdHRTNVTmFhZVljWUR3dHUvdElK?= =?utf-8?B?MklENXVMMGpWY0Rvck05YzJ0dmpjZm5DU25wdlBVUDh0WXkrWDhxcExIYmhP?= =?utf-8?B?dlBEb3YyM2h5ZjJnWm9nby92alBQSDkwOVNBeDN3VzM3T3NiVThBanZqbDVK?= =?utf-8?B?RzVMNHJoMHkrU3pTbFpmVmdmbnFFME43cnFoTEU4bUx5M3JmaVVFVWFub0lo?= =?utf-8?B?aU5LTXkraU45ZXJVaXhtQ3BqUlYxQTVYVEFnZ2hOYVl0aHFlT29mWml5YmNE?= =?utf-8?B?ZHZxNjV3Z3lVSWdNUGRzK0hYeCtlY29rS1RHNTZrcEhRZkluR3dBUGVCbnFJ?= =?utf-8?B?WWt0NHBkM0w1TTVsMUZzaytpNHNJM0puR1NwNkl6WXdjcDFlaWFLRStmMkFh?= =?utf-8?B?a1hBRjFYc09uczR1VXcxRHZldW9jYmMxdjlIWTdPVmVHRUs5SnE1bnorVU11?= =?utf-8?B?SXBqTDM1dzJpMUEyTVZCVlltdkoxVGNid3Vob0xabGt4WGJOd3VoZkRSR2pu?= =?utf-8?B?NlFQMDRhcXR1NUJJdWY3OGZNN1JSS2N2di8xRzdNTjU4dklpM1JaY3AvQmlF?= =?utf-8?B?NUFBRHZVMkljZ0REZDN2QUxvTlZhOWx4ZWpkd0cvS09mQzNVWGlMaDlxcEhs?= =?utf-8?B?czNESWxPMXdlM3ZwZ3kwZzhKN0UzNWc1b0NqUy90OSs1OHNPeVlObXdLNCtw?= =?utf-8?B?Q2xVK2xSN3piclIrTzhkQkRyQUFsWTUxeUdyS0VuTm9ESDFWVzdpM0hJVUpM?= =?utf-8?B?KzFqNmpxVzhPdzV1cmJOSEhQNlZzaFpDcHRldUNUa29kc2pyVHNWRmU2Qmt5?= =?utf-8?B?bkV4cUNpVkVhdks2cm8vbzU1ZlY3SVpvREx2RTdjVXJWZm1Ra0JEVElvQjhO?= =?utf-8?B?bmtuNUdqUktob2lkVDJjUGdLZkw5Tm8vU2s2T2E3VFZwWDVtakd3TDNqR1FI?= =?utf-8?Q?4sB/0yFKaBeanKLRTr0J?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 58e97659-bd5f-4245-e8b1-08dbcb2cc747 X-MS-Exchange-CrossTenant-AuthSource: DU0P250MB0747.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2023 14:08:59.6193 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2P250MB0238 Subject: Re: [FFmpeg-devel] [PATCH 24/42] avcodec/refstruct: Allow to share pools 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Anton Khirnov: > Quoting Andreas Rheinhardt (2023-10-12 15:51:18) >> Anton Khirnov: >>> Quoting Andreas Rheinhardt (2023-09-19 21:57:16) >>>> To do this, make FFRefStructPool itself refcounted according >>>> to the RefStruct API. >>>> >>>> Signed-off-by: Andreas Rheinhardt >>>> --- >>>> libavcodec/refstruct.c | 29 ++++++++++++++++------------- >>>> libavcodec/refstruct.h | 5 ++++- >>>> 2 files changed, 20 insertions(+), 14 deletions(-) >>>> >>>> diff --git a/libavcodec/refstruct.c b/libavcodec/refstruct.c >>>> index f8d040874d..2108ff8163 100644 >>>> --- a/libavcodec/refstruct.c >>>> +++ b/libavcodec/refstruct.c >>>> @@ -187,7 +187,7 @@ static void pool_free(FFRefStructPool *pool) >>>> pthread_mutex_destroy(&pool->mutex); >>>> if (pool->free_cb) >>>> pool->free_cb(pool->opaque); >>>> - av_free(pool); >>>> + av_free(get_refcount(pool)); >>>> } >>>> >>>> static void pool_free_entry(FFRefStructPool *pool, RefCount *ref) >>>> @@ -278,13 +278,17 @@ void *ff_refstruct_pool_get(FFRefStructPool *pool) >>>> return ret; >>>> } >>>> >>>> -void ff_refstruct_pool_uninit(FFRefStructPool **poolp) >>>> +static void pool_unref(void *ref) >>>> { >>>> - FFRefStructPool *pool = *poolp; >>>> - RefCount *entry; >>>> + FFRefStructPool *pool = get_userdata(ref); >>>> + if (atomic_fetch_sub_explicit(&pool->refcount, 1, memory_order_acq_rel) == 1) >>> >>> Is there a reason you cannot fold pool->refcount into the pool's >>> containing RefStruct? >>> >> >> If I simply incremented the pool's refcount for every entry currently in >> use by users, then the entries would only be freed when the last entry >> has been returned and all the references to the pool unreferenced. > > Ok, can you please mention this in a comment somewhere? It's quite > non-obvious why do both pool_unref() and refstruct_pool_uninit() exist. > >> In fact, when I did this, I pondered two things: Shall I make >> ff_refstruct_pool_uninit() free all the currently available buffers and >> then unreference the caller's reference or shall I just make it a >> wrapper to ff_refstruct_unref() to decrement the pool's refcount? The >> latter is very simple and I did it; the former could be advantageous in >> particular in case of frame-threading in case the dimensions change. (In >> this scenario, no user will ever create new entries after the first user >> unreferences a pool.) > > But in other scenarios you might want to get rid of some pool references > while still using the others, so maybe that should be a flag if > anything. > If I added a non-inlined ff_refstruct_pool_uninit(), I could simply still allow to call ff_refstruct_unref() on pool-references, so that one can get both behaviours. (Notice that this allows a malicious owner of a pool-reference to drain the pool ad libitum, but you can do way worse stuff with a reference than this.) - Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".