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 0512044234 for ; Fri, 2 Sep 2022 21:12:25 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C6BD368B944; Sat, 3 Sep 2022 00:12:22 +0300 (EEST) Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02olkn2054.outbound.protection.outlook.com [40.92.50.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D92ED68B44B for ; Sat, 3 Sep 2022 00:12:13 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Zq9EQaURFCp60/90MhfU9xBEr9uC92UPIHp+6L1YB6sC0jov0s28Ym14CwRjaxyVEhn8T1hW3gdmAaTthALbefin/el3XUwEfDnV35gI4O9dhgz21qvxrmYk3M1CbMIb3Uhwtc6kQezYy9TYOV/63u1q18xl6CCc1zFE9yhAeRhJqV6S3X8yrgTM2txRDKBdCIWi5E54xBcXRpPjoJKY2aHoZlLybOx6+cIYo4ye8ZMQxWY/TaQQPAXER5VNDXI471Jh5/mFPI6dRPSODLUAY8NvpJQDrnJuUoblt8FEn37/w8gRDOH+WzpGlfa6K8VG2ofMcRpBS1qIDO6mk0pm3g== 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=2e30ZMQU7IVY8iqPzFa6lN/ie5yoQbhHcgzTSSCDCeY=; b=DcskeuOj7gxRGwy5NzgIzclmtecNzZ45kYuakfWad2nced1Dg9QAB8xWmLV+JVb+5D8waQkPKAFQwB+Xkyo9/Y8Q4aaPBj6a2Tk29FpSb9zX+A7j8t+1WHSoeaIeYfswm2wNqTxtQucO9oaOPE0TVe+EVCnVwKL/1iKk0jAyFpAvIicibfw7VEq26dDAUoMdtnttUNalrvDItAVadRLijAs2cj8b9bK+/e1WL7KShg1bFuV/ksyuevYTqsdpPutqSEApLTUqpXTQ3GV7Vo2g52jv5iLqXd7tOFcdKUVrKNRPn3xgbA47OW1EZ1eNLFIEYXMze7J2SzWTwjG5001NFg== 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=2e30ZMQU7IVY8iqPzFa6lN/ie5yoQbhHcgzTSSCDCeY=; b=MZM6iyvVHc1ATcLoE2rZBergG2lGou59ReXzfe1Kq38Y09/h8OTqriaFu0oOuk+vGy0WJ/pNRpo2EqCCrFfJhNLMt5IljmpNA2ikwr2/yMYkwKrbzXgfwDTAi19GqruoJfOuTaUUJX6tdOGtBr69/J0UL0drbHlu/1MkhsdT8Gm7vZZHUhL7EdSlLAeWKnE6ITRhQVGH3DQfYVTSlnpa7injcqWHS0Qhktbljqt2Eq62M643yq6/6RjYpQLFO8fyPGb5inXwPzxaHhPB8xWdA7VtlyE+eYYyEJoGYBtVBSk+ZxZZpDzHCE5b9VX2EO7y7MhmxD75PeYVxW69nOF20g== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AM8P250MB0373.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:328::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.11; Fri, 2 Sep 2022 21:12:12 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::f85a:9a02:f8be:7c47]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::f85a:9a02:f8be:7c47%2]) with mapi id 15.20.5588.010; Fri, 2 Sep 2022 21:12:12 +0000 Message-ID: Date: Fri, 2 Sep 2022 23:12:12 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220902205932.17883-1-anton@khirnov.net> From: Andreas Rheinhardt In-Reply-To: <20220902205932.17883-1-anton@khirnov.net> X-TMN: [us3C8FLzVeK9UDI/dV7lF4DBwFRO7GwTkMEJt6Ead4A=] X-ClientProxiedBy: ZR0P278CA0191.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::10) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <02f4f5e8-8336-3933-9b5e-b8b4fed31065@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ddfbd6b6-77ab-4392-0676-08da8d27cdb3 X-MS-TrafficTypeDiagnostic: AM8P250MB0373:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GrlvaE7qMAiw0DA3xoZtLG/bFokBGxosFBmpBsl8CqfC++rhZqrn+M/U9f3n9+n8bT5S/FSjVfS17ZWaqKZERcC+IMo/p+c3pxLdTFBDtqQuJEtZCEw0vTVPFDWWoUvUVRlpKHEQOvMGAW3ti2HOJdOju8adDrZ3WrS8OkYW7bVOAlTZHy3YrA6Rttqnucxr2SWUKHjs4rcQDxM4zAC5vUSRTFcepVKSZsaUKqmQ5c2S7RQFj8TcpSfduPqfekDXH1cVVxrqwlNekEuDTX+wcY6okirauCXiI22rEjDQEDsx4WiTNLPHGo6cI4aYqqYaVwo18MikCeAEF2eBso1wpb6tXEfc7ldfOr0ZlKk/GSNQrFjUMGbmKYwDLyFCspVUx0WgUnzfDzd3Mlb+OKFYgxrweOMnOleWFIiqGolCUiPwJPWPQinYWFTb6bgUX44e61ruXGIZu7BvF5X+jCe64BddKt0tKeHXmuqMGzS5lRDmoPek5MJTqmnfIf1Wh9WpoiWgZye5277SU97H7dYiJVS5lQuuX/cYh0Zn6lvpY8nCSF3TZCKuphPumFf69babjGGkk/IOzWjgJ3ehJcO9j2z0E6KYeJ4RoIHhGqIjSYgp77stLLg2GK+Iy37CqCoXj95Mnhlwp8mv4iKQraNWXYSCEUa9xL4Q7fyN0Px6bY+dRa9qOa7vSBaUCS1b9LvE X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OHd3UHRWK3U5MGsycjFhSWxvNnI1b2xCejF4LzlaNjZuR2hhb2phY3RGWXZY?= =?utf-8?B?Wnd1eHJ6S0ZFQU94b1lFWkVmUlQ1R0pXbkNZTThxY2tOaE5RRU5ucVl0WG9B?= =?utf-8?B?WHVzdE1pTStDeG1WalNicDdmRUhnbkx4UUgwVlg5Vmd6QkMrTVhjd3lkUEUw?= =?utf-8?B?b1IvaWlEMFlOKy8ydWIwdTZMUEY1NmxzTk1jRHNST1c1Rk9pdURBWEJpY09U?= =?utf-8?B?bG5RTlRGMnROclVOeGoyQlBoMXptdENDeE9UTkh2U20zclZRdGJrc29QbkEv?= =?utf-8?B?RDRYUUJtNFAzYW1ESDJ0TDZjbnFPWmNhbEZNOXNxanpSdkNsYmd4UU1HM2VK?= =?utf-8?B?bTVPYmhaVStxUmJ6SHNOWjRhU2NObGhKd3lJYzh0S1p4TUYwaU1MRnlBWWM3?= =?utf-8?B?VUtQSzJyLzBuS1c2ODI2clQrcm9ISmprMklSTEhMdmNRRnY3V0xjZktsQXVw?= =?utf-8?B?V0U4L1JiU0NMWG93V3ZkUEg3QklnK0pUQkpkdURqZUxFYmc4TkNnYU1sSUZI?= =?utf-8?B?L1hJUDhGN1hoczVhZk4zS1QzeUhiaTlqRWgrUjNvSHVvZk9Qa28vMDlCdzF5?= =?utf-8?B?WEFaN2FxYnlKZjNQRnR2eTJqWlE0eitiMklPbEhnbm5STGoxcStSMmFLZW9E?= =?utf-8?B?TXEwditIRkJINzdqMCtEaU1KQWk5VE0remlUK1h2QmR1RSszVEEyYTlsdENn?= =?utf-8?B?amlzSHhiTzhhdFdzVks4ODZOR1c0N3NOSU03M3J0QlJJUVNjWmtNUXVmWXhm?= =?utf-8?B?WmpEakNMWmxOTnVLcXdaK0VENjBhSENnRnc4S054SzU0UVV1anFHMXJqNVVS?= =?utf-8?B?V3BTR0pxb1ZnNC9IYzFhcHp0SFFUNkxjTkpHNUdmQlJpeDdSVDB4b1BOVlhi?= =?utf-8?B?K001dGdWMUZjY2pVTjVXcWR3NTkxSXB6TGxqVjBEM0IzVUMwYWRBN1VwcENq?= =?utf-8?B?ZHI0WU5PcmErSUpKL0F5OHZhci9CcWFKMEF3Zkp0bzh0YjBBajNIbkNZMUlQ?= =?utf-8?B?dGp6eDNOVVhkZkg5dnlpVlBJaGJnRXR5bFRrUFB0THI3dGc1cnl2WTVJRG5X?= =?utf-8?B?TzF0dTRxNSs0NzNiVHRycmJFK3AyUGlzWHZZUDV6MEJVdEg0enhrL0dDVWpi?= =?utf-8?B?ckZUYUg2OVV0dnlsMDkzZjJpTjdNTVVqWE5hTFFlZTB2WWlwNmpSWDZsVHMx?= =?utf-8?B?dlJuamNJWVhUalEzQVZvT3ZUOHIyQ05iZStMTlBNVXZxaElBaUJrZDgxUEZy?= =?utf-8?B?VUdpeWprQmZLeVVocm5tRUxyOFRwRElZd0JjcFl4OEVGdHFkT3hkeEpLVXVG?= =?utf-8?B?NGNTbVE4bnVoZHllOWI2bWU0VUkydURuRE96cUJqV1NPazN3UlJBL04rUWRu?= =?utf-8?B?c0ZrdGtRdm9DS2d6cWtnakd0L3Z5QlFMRXR2UDN5ZXJEa2lvTkoyNGFSK1h4?= =?utf-8?B?c2VwdXBPOWIxdjA5WGpqWFlpcDZmY00wSzNHN3RXdE1FQ0c5MW1ZUWtqZnkw?= =?utf-8?B?a2Y0alBIZmwvc1VNRVZPcVBLRjZ2QStFWTVxODdQa2xDbXY5RmtXRGhaWkRP?= =?utf-8?B?MkpFRUQ1bXRvWjNYaThKd3IreGZaU0NFVmZ1Y1RUZ2hjMTZJTDBCdTdZZDlS?= =?utf-8?B?QnVNSDhsbG84elBRTG1LU00xZmh6N3plbE85UTlMUnJwVWV2ZmdIOGptdmVp?= =?utf-8?B?Y2F2UUdQTTFJT3pOYnRLTVpjeGx4WHpkeTBHN3doUlhJMXZyckEyWXR5QlY5?= =?utf-8?Q?PcQ9KmBL4Nh2eF5Py/0UHxT3Mj1XyxGr7n0ER9J?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ddfbd6b6-77ab-4392-0676-08da8d27cdb3 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2022 21:12:12.4542 (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: AM8P250MB0373 Subject: Re: [FFmpeg-devel] [PATCH] lavc/pthread_frame: avoid leaving stale hwaccel state in worker threads 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: > This state is not refcounted, so make sure it always has a well-defined > owner. > --- > Steve, could you please test this? > --- > libavcodec/pthread_frame.c | 37 ++++++++++++++++++++++++++++++++----- > 1 file changed, 32 insertions(+), 5 deletions(-) > > diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c > index 08a6f98898..9b44e2e698 100644 > --- a/libavcodec/pthread_frame.c > +++ b/libavcodec/pthread_frame.c > @@ -148,6 +148,10 @@ typedef struct FrameThreadContext { > * Set for the first N packets, where N is the number of threads. > * While it is set, ff_thread_en/decode_frame won't return any results. > */ > + > + const AVHWAccel *stash_hwaccel; > + void *stash_hwaccel_context; > + void *stash_hwaccel_priv; > } FrameThreadContext; > > #if FF_API_THREAD_SAFE_CALLBACKS > @@ -228,9 +232,17 @@ FF_ENABLE_DEPRECATION_WARNINGS > ff_thread_finish_setup(avctx); > > if (p->hwaccel_serializing) { > + /* wipe hwaccel state to avoid stale pointers lying around; > + * the state was transferred to FrameThreadContext in > + * ff_thread_finish_setup(), so nothing is leaked */ > + avctx->hwaccel = NULL; > + avctx->hwaccel_context = NULL; > + avctx->internal->hwaccel_priv_data = NULL; > + > p->hwaccel_serializing = 0; > pthread_mutex_unlock(&p->parent->hwaccel_mutex); > } > + av_assert0(!avctx->hwaccel); > > if (p->async_serializing) { > p->async_serializing = 0; > @@ -294,9 +306,6 @@ static int update_context_from_thread(AVCodecContext *dst, AVCodecContext *src, > dst->color_range = src->color_range; > dst->chroma_sample_location = src->chroma_sample_location; > > - dst->hwaccel = src->hwaccel; > - dst->hwaccel_context = src->hwaccel_context; > - > dst->sample_rate = src->sample_rate; > dst->sample_fmt = src->sample_fmt; > #if FF_API_OLD_CHANNEL_LAYOUT > @@ -309,8 +318,6 @@ FF_ENABLE_DEPRECATION_WARNINGS > if (err < 0) > return err; > > - dst->internal->hwaccel_priv_data = src->internal->hwaccel_priv_data; > - > if (!!dst->hw_frames_ctx != !!src->hw_frames_ctx || > (dst->hw_frames_ctx && dst->hw_frames_ctx->data != src->hw_frames_ctx->data)) { > av_buffer_unref(&dst->hw_frames_ctx); > @@ -450,6 +457,12 @@ static int submit_packet(PerThreadContext *p, AVCodecContext *user_avctx, > pthread_mutex_unlock(&p->mutex); > return err; > } > + > + /* transfer hwaccel state stashed from previous thread, if any */ > + av_assert0(!p->avctx->hwaccel); > + FFSWAP(const AVHWAccel*, p->avctx->hwaccel, fctx->stash_hwaccel); > + FFSWAP(void*, p->avctx->hwaccel_context, fctx->stash_hwaccel_context); > + FFSWAP(void*, p->avctx->internal->hwaccel_priv_data, fctx->stash_hwaccel_priv); > } > > av_packet_unref(p->avpkt); > @@ -655,6 +668,13 @@ void ff_thread_finish_setup(AVCodecContext *avctx) { > async_lock(p->parent); > } > > + /* save hwaccel state for passing to the next thread; > + * this is done here so that this worker thread can wipe its own hwaccel > + * state after decoding, without requiring synchronization */ > + p->parent->stash_hwaccel = avctx->hwaccel; > + p->parent->stash_hwaccel_context = avctx->hwaccel_context; > + p->parent->stash_hwaccel_priv = avctx->internal->hwaccel_priv_data; > + > pthread_mutex_lock(&p->progress_mutex); > if(atomic_load(&p->state) == STATE_SETUP_FINISHED){ > av_log(avctx, AV_LOG_WARNING, "Multiple ff_thread_finish_setup() calls\n"); > @@ -761,6 +781,13 @@ void ff_frame_thread_free(AVCodecContext *avctx, int thread_count) > av_freep(&fctx->threads); > ff_pthread_free(fctx, thread_ctx_offsets); > > + /* if we have stashed hwaccel state, move it to the user-facing context, > + * so it will be freed in avcodec_close() */ > + av_assert0(!avctx->hwaccel); > + FFSWAP(const AVHWAccel*, avctx->hwaccel, fctx->stash_hwaccel); > + FFSWAP(void*, avctx->hwaccel_context, fctx->stash_hwaccel_context); > + FFSWAP(void*, avctx->internal->hwaccel_priv_data, fctx->stash_hwaccel_priv); > + > av_freep(&avctx->internal->thread_ctx); > } > Does this allow to revert 091341f2ab5bd35ca1a2aae90503adc74f8d3523? - 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".