aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2017-03-31 11:27:20 -0400
committerMichael Niedermayer <michael@niedermayer.cc>2017-04-13 02:29:26 +0200
commitf5f0b2f44ce9df08f7a79b32d9209b23ba6b3447 (patch)
tree77a49a3a7ac449e7c1729c0644652013dcc810e7
parente9fc7a90ba21f2fb2953f24375db2b81e891a6f2 (diff)
downloadffmpeg-f5f0b2f44ce9df08f7a79b32d9209b23ba6b3447.tar.gz
ffmpeg: make transcode_init_done atomic.
Should fix tsan warnings in fate-fifo-muxer-h264/wav: WARNING: ThreadSanitizer: data race (pid=26552) Write of size 4 at 0x000001e0d7c0 by main thread: #0 transcode_init src/ffmpeg.c:3761 (ffmpeg+0x00000050ca1c) [..] Previous read of size 4 at 0x000001e0d7c0 by thread T1: #0 decode_interrupt_cb src/ffmpeg.c:460 (ffmpeg+0x0000004fde19) (cherry picked from commit 76d8c77430e9e0110623705bfb54d922cc2ac3ea) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--ffmpeg.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 11faf0d4a8..ea03179c21 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -30,6 +30,7 @@
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
+#include <stdatomic.h>
#include <stdint.h>
#if HAVE_IO_H
@@ -319,7 +320,7 @@ void term_exit(void)
static volatile int received_sigterm = 0;
static volatile int received_nb_signals = 0;
-static volatile int transcode_init_done = 0;
+static atomic_int transcode_init_done = ATOMIC_VAR_INIT(0);
static volatile int ffmpeg_exited = 0;
static int main_return_code = 0;
@@ -457,7 +458,7 @@ static int read_key(void)
static int decode_interrupt_cb(void *ctx)
{
- return received_nb_signals > transcode_init_done;
+ return received_nb_signals > atomic_load(&transcode_init_done);
}
const AVIOInterruptCB int_cb = { decode_interrupt_cb, NULL };
@@ -612,7 +613,7 @@ static void ffmpeg_cleanup(int ret)
if (received_sigterm) {
av_log(NULL, AV_LOG_INFO, "Exiting normally, received signal %d.\n",
(int) received_sigterm);
- } else if (ret && transcode_init_done) {
+ } else if (ret && atomic_load(&transcode_init_done)) {
av_log(NULL, AV_LOG_INFO, "Conversion failed!\n");
}
term_exit();
@@ -3758,7 +3759,7 @@ static int transcode_init(void)
return ret;
}
- transcode_init_done = 1;
+ atomic_store(&transcode_init_done, 1);
return 0;
}