From patchwork Thu Jan 4 18:19:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 7122 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.78.2 with SMTP id r2csp558671jaa; Thu, 4 Jan 2018 10:19:25 -0800 (PST) X-Google-Smtp-Source: ACJfBosTBkiapqsydPN05tOFh+2Ah+GHBU2GTX+wqY1Bz6YAj7cZfnvLI0YE1Ik3fTs1ZRftibMQ X-Received: by 10.223.161.12 with SMTP id o12mr435327wro.243.1515089965129; Thu, 04 Jan 2018 10:19:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1515089965; cv=none; d=google.com; s=arc-20160816; b=yuf22JQDQL7Go6k+ZWbT1ycAl8EGd9ZJIOsVuDKYVKki4cn1P9q5pdxwhjm3qHry9S SwbTL0FES7jgXT2oa/jkI4KahnKub2JUpClV6DzXU6GOq3u6WRmZiK00UPl+jXi+OZ1c 0tkrwWcNDdJQb0CODX0FBpGwGmwVvzzgj4em+6My6mdwHwgWQpOXSyvtcyJOj9MqphEe szsni4fnmN1p0NCRU9dR49065UZGcvPPcJg4ehQR/qCVn6ISGImb57d3YzBi2opc6LEk XBJ+8XVXf3TYv01vJBvhqPc0DlVZpuitmJrJl7pmMMRLCwRAon2PG6qT+61g7FZEkiPK wVRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=1mHseoxInFtkWBYxADpfKVbtqVeY4IEx0068nV7QwXo=; b=oDsk9MDwwjC6ylLuKN5pf3R4/a9B8ErKZOwfuWoUqVoOMWjddxSpW9PiUE5NCVABSO UoCfRR8T6J5YOUUGnZKHSfRwqstfOYEVFbFR/e1mJadyfXKf2SU/OIYL1K+eQwYt4sxh bR8+5TESr3eTTpi9BQNC6FCX7LABlvziKbtmBD7YixRJgPbFz2ipqpwTb1OwqHnIAnZV IwEZXmKBzp3CE4erg6Yfa25Swt/dJHWI/ZCx6Hxmd8+645fzVz+xB4+w/hPeIy/5i2bU w0Uk0rcnVxPI1aMvF3pAlf0NX9MGjnwPAZ5QXkpGHNdEteMFyWQ9m2RP/AxRA8Of0pLu HLTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=KHqcHYMS; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d23si2901769wrc.272.2018.01.04.10.19.24; Thu, 04 Jan 2018 10:19:25 -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=@gmail.com header.s=20161025 header.b=KHqcHYMS; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 608B9689934; Thu, 4 Jan 2018 20:19:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f196.google.com (mail-qt0-f196.google.com [209.85.216.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A97AB689722 for ; Thu, 4 Jan 2018 20:18:59 +0200 (EET) Received: by mail-qt0-f196.google.com with SMTP id d4so2923006qtj.5 for ; Thu, 04 Jan 2018 10:19:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=1ViHLLd7++a/gWn5FyZpE79Pu0gxfcbpmj5hMDo6FQg=; b=KHqcHYMSa1i4ErXTTjwc8svx3c5YJCa/jWLIRjPFRGAWNzuBRHbPANLRmUsb2AlUIN /qUacB0XN8Gdod4UyXtIiLjbS54qdKT7+Zjj1BL4Y0jrNkjpz0VLv150w0ES+b+wp6ZE xbD+Gb/AC8WwarU7HeU/5DJJqJAvhEMpRsm0b6BZgPMkeI6Lr+pvEuFUL/Ymo1jm1dY6 EQBMHYKnUYcXbgJ5PgqYX6fSVbeKICjLcjyU5SE6JQvXpJ/ImsZxyrqovgL037CNcxSE 4kRRCV29WQvBJjUTqp6RGgnR5GxzhFxBfFsSzUvdc31K8758+iR992Z/oJueSloWmYRe MQMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=1ViHLLd7++a/gWn5FyZpE79Pu0gxfcbpmj5hMDo6FQg=; b=LDlCFyDebeTGSj1TMmiBp3FCvCPBS+4x1dMcx+Lh9HRfxZXW6rKyqgdnFeeKRkwMJQ FPPJfh2p6iQZZxUoVq/8bNEhKHcRwlyos/1f2PBf1DjNgMNIZLXAk4WGBZbraLPiFDA3 ULccLgwMpJg3WdtWZphGcwOAvGjzZK5BhpZTK8TswLy/liuhGSK1wqvoN7gEUQ4C1O51 ITf3vR5OtCEXlsTo0+Fee0RmIC3PtTZFq8Ka2yZ6bxMfYycagoJ3PiRL4ks/1CY71/g7 Yue/+EBjZi7lbMd278N9fxxxLCiwN3C2CRnQ/fs5x5ENMsdbzeGmaH7gEKhhH7XtfwDe iOfw== X-Gm-Message-State: AKwxyteLP/V5yKeVJFPTxzcTF27jO739GjjjM4xuJzo5u1f2xUViLzHj EvJ0lTil1ZKRN6KOBjFxWLyVSQ== X-Received: by 10.200.23.117 with SMTP id u50mr583209qtk.139.1515089955279; Thu, 04 Jan 2018 10:19:15 -0800 (PST) Received: from localhost.localdomain ([181.229.225.176]) by smtp.gmail.com with ESMTPSA id n81sm2488321qki.87.2018.01.04.10.19.14 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 04 Jan 2018 10:19:14 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Jan 2018 15:19:01 -0300 Message-Id: <20180104181904.5816-1-jamrial@gmail.com> X-Mailer: git-send-email 2.15.0 Subject: [FFmpeg-devel] [PATCH 1/4] avcodec/util: use a mutex instead of atomics in avcodec_register() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: James Almer --- libavcodec/utils.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/libavcodec/utils.c b/libavcodec/utils.c index dfbfe98d63..61acf36c4b 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -26,7 +26,6 @@ */ #include "config.h" -#include "libavutil/atomic.h" #include "libavutil/attributes.h" #include "libavutil/avassert.h" #include "libavutil/avstring.h" @@ -95,7 +94,6 @@ void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size) /* encoder management */ static AVCodec *first_avcodec = NULL; -static AVCodec **last_avcodec = &first_avcodec; AVCodec *av_codec_next(const AVCodec *c) { @@ -127,16 +125,21 @@ int av_codec_is_decoder(const AVCodec *codec) return codec && (codec->decode || codec->receive_frame); } +static AVMutex codec_register_mutex = AV_MUTEX_INITIALIZER; + av_cold void avcodec_register(AVCodec *codec) { AVCodec **p; avcodec_init(); - p = last_avcodec; - codec->next = NULL; + ff_mutex_lock(&codec_register_mutex); + p = &first_avcodec; - while(*p || avpriv_atomic_ptr_cas((void * volatile *)p, NULL, codec)) + while (*p) p = &(*p)->next; - last_avcodec = &codec->next; + *p = codec; + codec->next = NULL; + + ff_mutex_unlock(&codec_register_mutex); if (codec->init_static_data) codec->init_static_data(codec);