From patchwork Wed Mar 22 23:34:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 3068 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.50.79 with SMTP id y76csp543657vsy; Wed, 22 Mar 2017 16:35:27 -0700 (PDT) X-Received: by 10.223.135.47 with SMTP id a44mr41354009wra.197.1490225727859; Wed, 22 Mar 2017 16:35:27 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w197si25863740wmd.1.2017.03.22.16.35.27; Wed, 22 Mar 2017 16:35:27 -0700 (PDT) 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; 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 A80C8689728; Thu, 23 Mar 2017 01:34:40 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f196.google.com (mail-qk0-f196.google.com [209.85.220.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 17DDA6805A7 for ; Thu, 23 Mar 2017 01:34:33 +0200 (EET) Received: by mail-qk0-f196.google.com with SMTP id v127so28087115qkb.1 for ; Wed, 22 Mar 2017 16:34:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=f5yxoa/SdyUa6GCW6rDGVeGkTGAOMcvdMQY/LV7Hrr0=; b=eQwxijZwHLf1g0P0x0y2mulQwqKh9N+k+o3gWaODEyCViC/xzV9cxA1J3xjKon4Tll 2ie21ZGkoK49CIozzk1kR16QCGjsY+amDY76iIUr7xQ58RYu9OKeEpGG2731BEw3LA3x xvSD/KCRAGeeOHSaP86OUN9vvlS5H4jZM7vBCqg6dhNg9brX6RHsFTUFFP5GQE1UOWO3 iLWpYKBrQsI7yNUs17tWAm5ELqZCFzZ48eK7Am7p7+cvc4B0a6tLyTh2utX6N+aj9YwX xbboszkcj4/43anoqDy+Pedr+Ki9qcR4PyBH+tZ/8655KVWKklD4d6B41u9OJ8nZULoQ yKkQ== 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:in-reply-to :references; bh=f5yxoa/SdyUa6GCW6rDGVeGkTGAOMcvdMQY/LV7Hrr0=; b=pruYG/2Q076ibdARFONKBnItSwC/Q6KZ9tWazQoL/XG28FiT21UUru/Mstv+89PCEK VZZtBrXwJiB2XZo0FHoh9O1ekobbG/iTnpXPyc7InovtqvoXs36yU9kQIj9HkAC9jt7u dLketNwKMZDTl5MtBkLQIwRAnpIWf0Hed9jPuA7I3wVidpDnwAbgiLbOv9Y/ifNRO3WU P1951loFfgwMdupgZFngvBixGt5F/ZlhaKWvItZA9GlpjGRJzHwmJQsFnuqmt6uUqD7F I6yizVc7MvXVDaiGGvRGFFdD+tfvkCErCPfTFgfHO5ljQkGoyXk02wQCkH+H//bBzZ/V HR/Q== X-Gm-Message-State: AFeK/H0Z9uW4PPeMi9uoXb1luKnJnQ/QJR6VrmJk4PAjNCmWHbGIdvowACiCxjblY4JVvQ== X-Received: by 10.55.25.81 with SMTP id k78mr11812211qkh.223.1490225690722; Wed, 22 Mar 2017 16:34:50 -0700 (PDT) Received: from localhost.localdomain ([181.231.62.139]) by smtp.gmail.com with ESMTPSA id w55sm2055133qtw.9.2017.03.22.16.34.49 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 22 Mar 2017 16:34:50 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 Mar 2017 20:34:07 -0300 Message-Id: <20170322233412.6952-3-jamrial@gmail.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170322233412.6952-1-jamrial@gmail.com> References: <20170322233412.6952-1-jamrial@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/7] avcodec/utils: convert to stdatomic 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 | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 365ee26056..5e983557fc 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" @@ -54,6 +53,7 @@ #include "bytestream.h" #include "version.h" #include +#include #include #include #include @@ -76,13 +76,14 @@ static int default_lockmgr_cb(void **arg, enum AVLockOp op) case AV_LOCK_OBTAIN: if (!*mutex) { pthread_mutex_t *tmp = av_malloc(sizeof(pthread_mutex_t)); + const pthread_mutex_t *cmp = NULL; if (!tmp) return AVERROR(ENOMEM); if ((err = pthread_mutex_init(tmp, NULL))) { av_free(tmp); return AVERROR(err); } - if (avpriv_atomic_ptr_cas(mutex, NULL, tmp)) { + if (!atomic_compare_exchange_strong(mutex, &cmp, tmp)) { pthread_mutex_destroy(tmp); av_free(tmp); } @@ -101,7 +102,7 @@ static int default_lockmgr_cb(void **arg, enum AVLockOp op) if (*mutex) pthread_mutex_destroy(*mutex); av_free(*mutex); - avpriv_atomic_ptr_cas(mutex, *mutex, NULL); + atomic_compare_exchange_strong(mutex, mutex, NULL); return 0; } return 1; @@ -113,7 +114,7 @@ static int (*lockmgr_cb)(void **mutex, enum AVLockOp op) = NULL; volatile int ff_avcodec_locked; -static int volatile entangled_thread_counter = 0; +static atomic_int entangled_thread_counter = ATOMIC_VAR_INIT(0); static void *codec_mutex; static void *avformat_mutex; @@ -178,11 +179,12 @@ int av_codec_is_decoder(const AVCodec *codec) av_cold void avcodec_register(AVCodec *codec) { AVCodec **p; + const AVCodec *cmp = NULL; avcodec_init(); p = last_avcodec; codec->next = NULL; - while(*p || avpriv_atomic_ptr_cas((void * volatile *)p, NULL, codec)) + while(*p || !atomic_compare_exchange_strong(p, &cmp, codec)) p = &(*p)->next; last_avcodec = &codec->next; @@ -3859,8 +3861,9 @@ static AVHWAccel **last_hwaccel = &first_hwaccel; void av_register_hwaccel(AVHWAccel *hwaccel) { AVHWAccel **p = last_hwaccel; + const AVHWAccel *cmp = NULL; hwaccel->next = NULL; - while(*p || avpriv_atomic_ptr_cas((void * volatile *)p, NULL, hwaccel)) + while(*p || !atomic_compare_exchange_strong(p, &cmp, hwaccel)) p = &(*p)->next; last_hwaccel = &hwaccel->next; } @@ -3912,7 +3915,7 @@ int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec) return -1; } - if (avpriv_atomic_int_add_and_fetch(&entangled_thread_counter, 1) != 1) { + if (atomic_fetch_add(&entangled_thread_counter, 1) != 0) { av_log(log_ctx, AV_LOG_ERROR, "Insufficient thread locking. At least %d threads are " "calling avcodec_open2() at the same time right now.\n", @@ -3935,7 +3938,7 @@ int ff_unlock_avcodec(const AVCodec *codec) av_assert0(ff_avcodec_locked); ff_avcodec_locked = 0; - avpriv_atomic_int_add_and_fetch(&entangled_thread_counter, -1); + atomic_fetch_sub(&entangled_thread_counter, 1); if (lockmgr_cb) { if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE)) return -1;