From patchwork Mon Sep 11 13:58:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ronald S. Bultje" X-Patchwork-Id: 5095 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.36.26 with SMTP id f26csp3119955jaa; Mon, 11 Sep 2017 06:59:11 -0700 (PDT) X-Received: by 10.223.187.148 with SMTP id q20mr8597014wrg.34.1505138351719; Mon, 11 Sep 2017 06:59:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1505138351; cv=none; d=google.com; s=arc-20160816; b=yX2LCbRyXr2dkiD2UehZ1D7whoKrJT/XfXR2ruFYj7YBfUauHNflKLogYjczpt6utx dRz3FuV69j8QArzwCRXwmlwRCErWFuisAw/R5Q2GjIqmpSiiDiATBhhUiv0sokpyNfuG R3EA9FRr2BqOcRa0j8ctgZzhd36H0fBhH+dqF2IX9knk98psNO1DDISl+nz9d4dLkxBH eYsAOiy5ksEBlEYEmYqR5QLDrfomyUP9mlhbUrYaLkW8rqQ7KRYqJB8JqsF8/rNAlMss 7sH/l/6KfQuwLCuj0RAyuVtrxccfBfVKtADcS3GuPWSZTZElitbyVj7RBE+uqpvPhKm+ iGKw== 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=3jQatjZLU0Q4iR62lef9uVjPdWgtDo56V7JNosSeiZM=; b=eawg1pIObj+KT6w0c3MeVIxpnP5b2ZNmhrUmebe8O9X8tdJ+xQ0KyRpthH0khAvV8Y icjZxMSV7vYbraf84DKiYkr9bpIP49ZZmq4jbcscQfO66LcIE4jhuKDaIljg/XLc+h+v XcCqZnZfC1qPZUhXKL5X+DntnyJaUWoJ0lfw5aQxJFjYtJZqr/ObtCRTfGGYNna0u4Ls NqFR2Jl32IekUFXZFmrsbL7UM1TZXmSby0VcNODUOblSTpRo99mchkyuwD5hkOrxFbKC 55lty0ktmwjqfM/0cBEvFbqhEG+0bas5FKTT7QiaTVAqACYYd/UxKeKX2zWQsWJ8KO5l A+xw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=NOEAVJWO; 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 d17si6780185wrc.555.2017.09.11.06.59.10; Mon, 11 Sep 2017 06:59:11 -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 header.s=20161025 header.b=NOEAVJWO; 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 CC9CF689A06; Mon, 11 Sep 2017 16:59:01 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f174.google.com (mail-qt0-f174.google.com [209.85.216.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3B91D688383 for ; Mon, 11 Sep 2017 16:58:55 +0300 (EEST) Received: by mail-qt0-f174.google.com with SMTP id k2so19116782qte.2 for ; Mon, 11 Sep 2017 06:59:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=pPf89V3L/Cr5iuf0PGZYIl95sefuAtIbiuXRLyBBmUo=; b=NOEAVJWOYzwPcka4lbZrnlpdga0q6rS+5wD/l7CMc2FosYFGj5AVVIVN0Lb09TLmfd tgf1A9+P4+P5MHrXEQrWeaeTmpqyRLY0CdHcVCFat+07/Fsu7UWzx8HiKDOR74QFj1TL 1HZwcL1cqlPOS1ak4G2vAIBLFWNyCnsR5Lhg6oWkdc4AypSg2cxz0QKWpneDExNrkqrK bOm5d6vs4pIEgIn2YN6nWrRtWaGzo4puO+r5FjXKQCRNYDbs+nZsOqI2hG70ERevtlgs y65VVQa9w4YOr+wn6quUhvdwg6K2oZ7D4Exwr9cm0Fxk6PQ5migsbiry/qF5AvyqLIxZ AFIA== 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=pPf89V3L/Cr5iuf0PGZYIl95sefuAtIbiuXRLyBBmUo=; b=JHHwM2n582YMwns7O58vUGux7PRZ4JinL3ru5e07DZqTmjJW+yU4/k/hLmdJrhT5oT MQmDiMrVl4nsv0hyvTtZF5U0KQe0jfjTwE67jQiO9Hdpk/md+ryPwU8QRKAaTF+wDyzW kXI/UkhywcVOAL3mqq3OsRjQU9SBjl5UlEYf7F4tgMA/8yc1cJq7761S3sXzOnIwDXLA /y7QoBgFY93PhwkLaryWvSgxaKjOSiCoFIY3W0oVtV98UmApklbrvT6Zvm20Nzca0YvF oNmOqrF0K2Nh0ctc4W/ckNeytP8UuDPEv9C/YfhcJdMFH3u1JO+TES4wBenp7H6mD0Hv 04eA== X-Gm-Message-State: AHPjjUheF+rZe0gijVbufFactDYUfIJZWQspXtldwtSWDVAzjlEexZEK 5T8//zYwFrKLHQLy5ko= X-Google-Smtp-Source: AOwi7QAhoNqAMYiQll7cmBwzDEoUagI1LLm5lFDIQp5nYXhqrcippufS69hzCzxVQ0OtwxpQPY2QqA== X-Received: by 10.237.58.7 with SMTP id n7mr5119467qte.205.1505138338986; Mon, 11 Sep 2017 06:58:58 -0700 (PDT) Received: from localhost.localdomain ([65.206.95.146]) by smtp.gmail.com with ESMTPSA id 20sm6254136qtu.77.2017.09.11.06.58.56 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 11 Sep 2017 06:58:57 -0700 (PDT) From: "Ronald S. Bultje" To: ffmpeg-devel@ffmpeg.org Date: Mon, 11 Sep 2017 09:58:55 -0400 Message-Id: <1505138335-29960-1-git-send-email-rsbultje@gmail.com> X-Mailer: git-send-email 2.8.1 Subject: [FFmpeg-devel] [PATCH] frame_thread_encoder: make 'exit' member atomic. 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: "Ronald S. Bultje" MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Should fix the following tsan warning: WARNING: ThreadSanitizer: data race (pid=19806) Read of size 4 at 0x7b84000012f0 by thread T9: #0 worker src/libavcodec/frame_thread_encoder.c:66 (ffmpeg+0x0000007f349e) [..] Previous write of size 4 at 0x7b84000012f0 by main thread (mutexes: write M1395): #0 ff_frame_thread_encoder_free src/libavcodec/frame_thread_encoder.c:239 (ffmpeg+0x0000007f379e) [..] --- libavcodec/frame_thread_encoder.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libavcodec/frame_thread_encoder.c b/libavcodec/frame_thread_encoder.c index 33928fe..35a37c4 100644 --- a/libavcodec/frame_thread_encoder.c +++ b/libavcodec/frame_thread_encoder.c @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include + #include "frame_thread_encoder.h" #include "libavutil/fifo.h" @@ -55,7 +57,7 @@ typedef struct{ unsigned finished_task_index; pthread_t worker[MAX_THREADS]; - int exit; + atomic_int exit; } ThreadContext; static void * attribute_align_arg worker(void *v){ @@ -63,7 +65,7 @@ static void * attribute_align_arg worker(void *v){ ThreadContext *c = avctx->internal->frame_thread_encoder; AVPacket *pkt = NULL; - while(!c->exit){ + while (!atomic_load(&c->exit)) { int got_packet, ret; AVFrame *frame; Task task; @@ -73,8 +75,8 @@ static void * attribute_align_arg worker(void *v){ av_init_packet(pkt); pthread_mutex_lock(&c->task_fifo_mutex); - while (av_fifo_size(c->task_fifo) <= 0 || c->exit) { - if(c->exit){ + while (av_fifo_size(c->task_fifo) <= 0 || atomic_load(&c->exit)) { + if (atomic_load(&c->exit)) { pthread_mutex_unlock(&c->task_fifo_mutex); goto end; } @@ -187,6 +189,7 @@ int ff_frame_thread_encoder_init(AVCodecContext *avctx, AVDictionary *options){ pthread_mutex_init(&c->buffer_mutex, NULL); pthread_cond_init(&c->task_fifo_cond, NULL); pthread_cond_init(&c->finished_task_cond, NULL); + atomic_init(&c->exit, 0); for(i=0; ithread_count ; i++){ AVDictionary *tmp = NULL; @@ -236,7 +239,7 @@ void ff_frame_thread_encoder_free(AVCodecContext *avctx){ ThreadContext *c= avctx->internal->frame_thread_encoder; pthread_mutex_lock(&c->task_fifo_mutex); - c->exit = 1; + atomic_store(&c->exit, 1); pthread_cond_broadcast(&c->task_fifo_cond); pthread_mutex_unlock(&c->task_fifo_mutex);