From patchwork Mon Nov 27 04:30:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rostislav Pehlivanov X-Patchwork-Id: 6393 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp1218267jah; Sun, 26 Nov 2017 20:37:54 -0800 (PST) X-Google-Smtp-Source: AGs4zMaGvYDJEyw6pR8aVVBSD3F8G9xn5DWk4OikHKt22I5/+3HQznc21QFGOatR/iLEEQakxQ8J X-Received: by 10.223.161.158 with SMTP id u30mr20494936wru.200.1511757473943; Sun, 26 Nov 2017 20:37:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511757473; cv=none; d=google.com; s=arc-20160816; b=Q9WLtgLUNV+0IYM45m8Xi9V/Xu697yNEkJa2g7oH3+0OyttPER6Mg6KYol16XuSPN3 ql4lVhK6ucRIzsLvoanSkA/e/xDjZAuI5xzmAcJCn/Tn2qhlA3Lwh5v6OyQQs7s8/jhi Yz4/sl0gqGgFLwf/5o8jeP9LaZCRpRVG7ZDWlpS9nXyCcT4DjK3iBVZV+xM51+CjxBnR 0zUjmoKGeCudfA1JWo7vXcIP8Q5SjyYJZUWZQgg/tGIxtT47Lwac9F89ow67oqABnbwW qgMGh4vvAZjHD+9K6Il814LQCrgU7kdDama2TR6sfOMb/XorI4RzXxJSOD/z0LwDQzR3 nJ+A== 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:cc: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=tVimFq1NgvYJuZKKuOxwSaJreMQ9BcPlBYnni9lbftU=; b=YH6NkVaa8hoWUy+zff7vchhXG7wjsJ2ohm8UbXI4/uiRO00Of/+BVv7In4ryD8PdqC hd4olZHOodFZ9UkREn79YmTkYROxn/srUuOs7VeNUrIJNEHfqUhQnmaZcar+uFhea7wb fPAGglTrRHuByodf+f1a0lbsWMM+nMkCGchQAr1h0XEgmLSol0I+HkqMbrpobArXCzXG Pdwt27/c3P5AUsJWW8AdjekZaIGdyXs8GkmZU5OwhwDf8RR0ojj2AXmkyJGwBV6EWVbR +UJydWQqGlfSaz3OKHlqyz5MWtcnw4FLuzIHYwJMCfDbvYbClsNzikmJsIfQj1fpnwla wu/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=P58QqzUC; 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 o1si10498784wmf.212.2017.11.26.20.37.53; Sun, 26 Nov 2017 20:37:53 -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=P58QqzUC; 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 A2C38689ECF; Mon, 27 Nov 2017 06:37:50 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f194.google.com (mail-wr0-f194.google.com [209.85.128.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4900C689B08 for ; Mon, 27 Nov 2017 06:37:44 +0200 (EET) Received: by mail-wr0-f194.google.com with SMTP id s41so19710303wrc.7 for ; Sun, 26 Nov 2017 20:37:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=seVg4e7GlLWNiNXjAi8Wt7ebc6E9g0eK9e+sy9DqSUI=; b=P58QqzUCRBedXuu24kr/f6VG4N+Cm3t2IJgr3Ibdq+nVdny0rVSI5pT0UUl1WlyxWO gmqgFrbN1bpnbAjzjunHRGAAGNVlI/DwimotPFVzerd+H6SPLFxWhc6+Is0FONE+/afg b9MlqHZ5NpfXpB7IGjOC1F4vHvFV6akYFKyd39TKxmjPbepOdCEbbSNaz3NLeEiy1VTX gf7tuBUmm/HbYBnIWHi/Koium3vE6sRLHRdpLNNVbEkuTXNkqf2BmPQ7vY3Hnhk8fwee GL2ZHwFFt6xf0W/LvNiXaRGiiO5p2PbFtwJHM3LyJpgzUR/LZmE+P6xKgEvESxckLbvH Xkcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=seVg4e7GlLWNiNXjAi8Wt7ebc6E9g0eK9e+sy9DqSUI=; b=g9gWe6IA721sHxj/vRvfAr89TwQx78v582pNxP13PtxZx9M5SeO4LPAVbs4Ki6Cwus Mc6QIUpTMBqQiwa+IDUsX4ux1lFREAJe7EiEEYLUUd2XrBKnJUdsYzq0/RwoSIwsdTav E5GmpynoZQvxQZf4n9cA0QrusOy8zmiPRTKh/omCoBSIg/49c3Mw6DbgI0eUKumS/9BU TjjuoAHkT1mBx98k9XXKPYkoRMUnQvLDMCqAhUOz8puBlY8kwKGHYji4JiMOyP3dp9X8 FSOnj41O9zKw2C2hsrPi+fKWtVninuBhvayqpe14VWwTJuB5dFgp3YhFMWgB30KCmIX0 Pj2Q== X-Gm-Message-State: AJaThX6VkmXzDGkHDnnpXkap2gtXd5FYVpHErxq33wV40B3DbID+6iPB Ld9EX8rzwzRFMESef2bCw5Ysw4cv X-Received: by 10.223.136.253 with SMTP id g58mr32577271wrg.86.1511757023538; Sun, 26 Nov 2017 20:30:23 -0800 (PST) Received: from moonbase.pars.ee ([2a00:23c4:7c83:f700:5813:5124:6fa1:dad9]) by smtp.gmail.com with ESMTPSA id 68sm20151547wmh.2.2017.11.26.20.30.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 26 Nov 2017 20:30:22 -0800 (PST) From: Rostislav Pehlivanov To: ffmpeg-devel@ffmpeg.org Date: Mon, 27 Nov 2017 04:30:18 +0000 Message-Id: <20171127043021.20321-1-atomnuker@gmail.com> X-Mailer: git-send-email 2.15.0.417.g466bffb3ac Subject: [FFmpeg-devel] [PATCH 1/4] lavc/parser: use C11 atomics 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 Cc: Rostislav Pehlivanov MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Rostislav Pehlivanov --- libavcodec/parser.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libavcodec/parser.c b/libavcodec/parser.c index 670680ea7c..baf1de4d88 100644 --- a/libavcodec/parser.c +++ b/libavcodec/parser.c @@ -23,30 +23,32 @@ #include #include #include +#include #include "libavutil/avassert.h" -#include "libavutil/atomic.h" #include "libavutil/internal.h" #include "libavutil/mem.h" #include "internal.h" #include "parser.h" -static AVCodecParser *av_first_parser = NULL; +static _Atomic(AVCodecParser *)av_first_parser = NULL; AVCodecParser *av_parser_next(const AVCodecParser *p) { if (p) return p->next; else - return av_first_parser; + return atomic_load(&av_first_parser); } void av_register_codec_parser(AVCodecParser *parser) { + AVCodecParser *old_parser; do { - parser->next = av_first_parser; - } while (parser->next != avpriv_atomic_ptr_cas((void * volatile *)&av_first_parser, parser->next, parser)); + parser->next = old_parser = atomic_load(&av_first_parser); + atomic_compare_exchange_strong(&av_first_parser, &old_parser, parser); + } while (parser->next != old_parser); } AVCodecParserContext *av_parser_init(int codec_id) @@ -58,7 +60,7 @@ AVCodecParserContext *av_parser_init(int codec_id) if (codec_id == AV_CODEC_ID_NONE) return NULL; - for (parser = av_first_parser; parser; parser = parser->next) { + for (parser = atomic_load(&av_first_parser); parser; parser = parser->next) { if (parser->codec_ids[0] == codec_id || parser->codec_ids[1] == codec_id || parser->codec_ids[2] == codec_id ||