diff options
author | Rostislav Pehlivanov <atomnuker@gmail.com> | 2017-11-24 23:38:44 +0000 |
---|---|---|
committer | Rostislav Pehlivanov <atomnuker@gmail.com> | 2017-11-26 02:17:23 +0000 |
commit | 3154f4417ab56cfd1e978e6abbb68a9f9f7600ed (patch) | |
tree | 5e229b7add22abdc0d69ed5b70e5bfd7e0e59bf6 /libavcodec | |
parent | abf669479c0098ab5eb184a167e57a70aabb942b (diff) | |
download | ffmpeg-3154f4417ab56cfd1e978e6abbb68a9f9f7600ed.tar.gz |
lavc/utils.c: use C11 atomics for entangled thread handling
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/utils.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/libavcodec/utils.c b/libavcodec/utils.c index e50de6e89b..3a0f3c11f5 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -56,6 +56,7 @@ #include "version.h" #include <stdlib.h> #include <stdarg.h> +#include <stdatomic.h> #include <limits.h> #include <float.h> #if CONFIG_ICONV @@ -114,7 +115,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; @@ -1944,11 +1945,11 @@ 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)) { 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", - entangled_thread_counter); + atomic_load(&entangled_thread_counter)); if (!lockmgr_cb) av_log(log_ctx, AV_LOG_ERROR, "No lock manager is set, please see av_lockmgr_register()\n"); ff_avcodec_locked = 1; @@ -1967,7 +1968,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_add(&entangled_thread_counter, -1); if (lockmgr_cb) { if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE)) return -1; |