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 9E82C47698 for ; Tue, 19 Sep 2023 20:00:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6EAFC68C9BB; Tue, 19 Sep 2023 22:58:13 +0300 (EEST) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2061.outbound.protection.outlook.com [40.92.91.61]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 66CD468C9A3 for ; Tue, 19 Sep 2023 22:58:12 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZX83V1ZHTwO4hsFflju2TLreewnLvyFMPQ80vGRyXJlxJIlWx4y62BQBak1TBBA3XL8lVMHQTwx2H4Bw6vX41SbzMizi4EVOqviC4CEOWhrkLHlVbMhywMqETMt/u5J0ecgXbVYcAiA4Qcqf9DjHCQ7FfuPDOm/h4T0q72CH4YKbeD82A8B5eV4++8gCkq4cX96yeixA1Av+8VllthqL/OO3nEOPEgyMNUew0Lln2QJeRSe6CwiS/F8LMzmr5vtip9cwP0sCJ/DalBHXTJhJM9zgwblxMxvyfiaQkMOhYNgQ3A4RXkFXb61fShTAZl+aCn1fZD0FQj1yyTndah+9EA== 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=EzbWnTBh1vNIJhI5f27s+ZXWguCGboAdKOnZfES4Zz4=; b=Y3pJw3qNu5F3LOfLR3Ta3e5lEd16iE4q3oAwuIN5MwfgnZdQBtnYkFDTukiBCuu9vFkDwbsNWBmHu2m0jy0MTEfH3QkOlxG2wzeh+ZoCcHHqYZtEgDg2G7HKHuBESkTDeLTKrW0KSghd4gaqQwk30IeQThbfMQaiCGeHHRli93XduJ54N3fJP7CgBRoCJwAtrhuXQf5yB6F7KesYHOPOxkkGDWxwrbOHu1+LR56LmaF61lPWURv0d+wJng4PlTVPsD3VCPumiakCwRWomsLA242IGnp87fAYYVUzeADqWTgqHuDkB/r+0w7haviujwHGwFlr4d7Vckcg4zWfu4k0XQ== 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=EzbWnTBh1vNIJhI5f27s+ZXWguCGboAdKOnZfES4Zz4=; b=jGhkGXvZAYclBwprhJB82T6rgFw3ulZc0oAQlqgljQP9Pwhv2kOu+x31KVSnj1C1KvuDL30rD1Jg+/ZlRKoWrmbGvAus/zLODx9z9cjk6XDbGidLfE4puY9zYaNa+4NuZxCTFtflZWhs1qiGZXXlAIE0cVvmBtaLyKW5J3W87NVXimmsfkkVp8ELCC1GyNCwmrurbUinNi4EwMWj//mDHbGqUzldo4HQivQ0kwad6hEEDyY7d+NGksAwy0EgZfwdVcPygmdKO0Sge4jNjWWMyvBZdqoN5YMXkDPzqj2KL4ML0Ut4E2YJ+lHZfqrAE1l1eiuzmGgWvMSXjyiaOmJ+3A== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0237.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:276::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.26; Tue, 19 Sep 2023 19:58:10 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6792.026; Tue, 19 Sep 2023 19:58:10 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 19 Sep 2023 21:57:16 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [2QFvfyrSHlxxaBXisr42HMDUvuYSPauf] X-ClientProxiedBy: ZR0P278CA0086.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:22::19) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230919195734.1005750-24-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0237:EE_ X-MS-Office365-Filtering-Correlation-Id: a9ed6953-4401-4c8e-69aa-08dbb94ac035 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YrS4JbZKxFbqr2malx6WncjypxIXa1PARVxGVDM2a8SOxnZcNPBfCzgVLDI9jI5MuHYr3RSoCWQ5KljzD7lYG8aMS/+mKaC0BjITJ0ZmmPHcCUaJt3bCU/e6kEhhhVR6IIUMUxA8PekTYr2iDlPA5SpnDx5mwGHtxD7EKFTDM9aQeVijqKz6cCFXKi3/Epbx5BiQ12koqsFhrDXBL7jQHA16JblO2h1edgIA/GC24sUQmx90Pc7ksIA/ZDx0ERNxDmxd1qUg0A57593iuPlLpBkO3IL/N/JSdCRU31IURYia4hH6zGR3h7pl1zghNgOSItPhrlAQOk+0Gs41wEQisWsoFoyAYL93/NHofuKC7ig5T9wFTlYWiW2EGN7IdEUUoI4DO9V0/WVgID+NU1d4okXrxyJDl9WEPVOjNmtTud5lPHM1MXwh1vKox3bQvOKEqJj5ERD9WWPrj7P7i1McSbao8tGc6V6t/i/8yaf9DxNMimxQ4K/ViMNdDq7uJALfQb1Z+tmbZ/HDipuPoxeb/5aVv0edGh32ql+OcJrPVpF3OwmGyEbNJdvXhJtRgwkiFgJ0PnuDIOoE3Zd+0f0X/gFe2ObYnTAL7BgueNDPzIjx4bJfW8RjTA7Qs7DACpYi X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TsVD6ObARFHiRheRVzCaXVoMtVJZEDrJI6evOTCgcsVKEi9qNErBKHfmOmLk?= =?us-ascii?Q?hVp/Bx80FK7ZUv4+rvFyYPgM1/xfyLyDkxY2/GIpkltylDLWr7isdh5d0OAq?= =?us-ascii?Q?xeaf2F6rNawviL9hXlXC4UqF7pu3RraAIrbMUCzEke2CWNqYJXL445TinDjd?= =?us-ascii?Q?nM11Hz6P0gVBXf0AY78pUhadTpuPQEaXCj08ZbSnEhQYd+gWyBs+Typ6rDrz?= =?us-ascii?Q?7mBbmp3n7gSQFmuY1R2Lwf7+Wsnx+akfuYp+7X1rlCVQlZQzY9k+J55ZEuxD?= =?us-ascii?Q?pRgQpC+ql3hPrbTiDWYg0YplWZG0ClCiP0LxCbyPDcFtcM2JfLwbzGLnYziR?= =?us-ascii?Q?JfeuJZoguQBbOPhR6wI91qi6QRMHPab6b5pZXlvxS5JtegRbdqjjSmYlhyeX?= =?us-ascii?Q?4cpSauuL49KOeL7Bj3CpCMH9tHSB5af16dx/++r6/Zlh/q5NPbkqQN4G51Zt?= =?us-ascii?Q?UBHuHuRtGXlADGeMzWD6EY5Z0VSVsKmlTap7I5B2NYjW5SLSSgxBZUa6Ruvj?= =?us-ascii?Q?ZFEYeY/7R6VbC7gCIepLKiAJw0wvevCM6T66jcayElpQUBARHzRc4JU5UqCg?= =?us-ascii?Q?/llcP2aHoby4yd0xCsaOX4BDERCmlq6MuMjtXCXY5ZUTXHza0C9d+P7hoQ8z?= =?us-ascii?Q?i/bnW+5exQN0uUH+zhVOj1s6ZxAh6BbcMlR7r1TNt+62lv6kRCnmXXEv1JiA?= =?us-ascii?Q?Va1tqVUkW6iLulFYMWHXcjYZgLDO5cfK5hd5/TqmXdK6nl8lUANT1DuLO5Sn?= =?us-ascii?Q?4Bffq/TvYt10NvyuZg9QaXLZKJHk8hhQq/R/R1tztrOCQzfGQDv3VgPFVGY5?= =?us-ascii?Q?/dnxaEsfPACl7vj4eQw6FQUPEl6ij5u2HL2Lmb9qsR8YATppip9DGPcR+/Hy?= =?us-ascii?Q?DHaiqzE34J4ev1Pfs+30Bl0bL3Yh6/JcKW1nrhDJeJ4+Ucr5c4yaTGqY9x90?= =?us-ascii?Q?sJ0iw63NZxbFh5L5Y0tZu/a+eKsZe9H6L8OyIdbTVrN8/8/ncBaq9w+JCGNT?= =?us-ascii?Q?SlIE50aEQMQQuGij6cyprFMQQ1cSkT4jbODDRd060i38ppLSpky1d7sJHfvZ?= =?us-ascii?Q?DluAlRjSLMfxZjiiOaW/g6hFQho5eHDGwrpDX9cI8wjIPrNmeEPbnI1MPthB?= =?us-ascii?Q?kvWCw/jcFxrA7oL9X/mFxAG0b6ZJjaOjcDN89tF8lOru0Xsgb3aAdEEMU9vM?= =?us-ascii?Q?Nz+CNhhU1Lr+5lSXMXQAY7RMjQX390xTr/nnh2a41+dubWm3j+J0TGW2ZVOR?= =?us-ascii?Q?jzGURcYSROxfBk7z8BHU?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9ed6953-4401-4c8e-69aa-08dbb94ac035 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 19:58:10.8867 (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: DU2P250MB0237 Subject: [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 Cc: Andreas Rheinhardt 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: 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) + pool_free(pool); +} - if (!pool) - return; +static void refstruct_pool_uninit(FFRefStructOpaque unused, void *obj) +{ + FFRefStructPool *pool = obj; + RefCount *entry; pthread_mutex_lock(&pool->mutex); av_assert1(!pool->uninited); @@ -298,11 +302,6 @@ void ff_refstruct_pool_uninit(FFRefStructPool **poolp) pool_free_entry(pool, entry); entry = next; } - - if (atomic_fetch_sub_explicit(&pool->refcount, 1, memory_order_acq_rel) == 1) - pool_free(pool); - - *poolp = NULL; } FFRefStructPool *ff_refstruct_pool_alloc(size_t size, unsigned flags) @@ -317,11 +316,13 @@ FFRefStructPool *ff_refstruct_pool_alloc_ext_c(size_t size, unsigned flags, void (*free_entry_cb)(FFRefStructOpaque opaque, void *obj), void (*free_cb)(FFRefStructOpaque opaque)) { - FFRefStructPool *pool = av_mallocz(sizeof(*pool)); + FFRefStructPool *pool = ff_refstruct_alloc_ext(sizeof(*pool), 0, NULL, + refstruct_pool_uninit); int err; if (!pool) return NULL; + get_refcount(pool)->free = pool_unref; pool->size = size; pool->opaque = opaque; @@ -348,7 +349,9 @@ FFRefStructPool *ff_refstruct_pool_alloc_ext_c(size_t size, unsigned flags, err = pthread_mutex_init(&pool->mutex, NULL); if (err) { - av_free(pool); + // Don't call ff_refstruct_uninit() on pool, as it hasn't been properly + // set up and is just a POD right now. + av_free(get_refcount(pool)); return NULL; } return pool; diff --git a/libavcodec/refstruct.h b/libavcodec/refstruct.h index ce3830977f..d525be61e8 100644 --- a/libavcodec/refstruct.h +++ b/libavcodec/refstruct.h @@ -285,6 +285,9 @@ void *ff_refstruct_pool_get(FFRefStructPool *pool); * @param poolp pointer to a pointer to either NULL or a pool to be freed. * `*poolp` will be set to NULL. */ -void ff_refstruct_pool_uninit(FFRefStructPool **poolp); +static inline void ff_refstruct_pool_uninit(FFRefStructPool **poolp) +{ + ff_refstruct_unref(poolp); +} #endif /* AVCODEC_REFSTRUCT_H */ -- 2.34.1 _______________________________________________ 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".