On 25 November 2017 at 18:37, James Almer <jamr...@gmail.com> wrote: > On 11/25/2017 2:01 PM, Rostislav Pehlivanov wrote: > > Signed-off-by: Rostislav Pehlivanov <atomnu...@gmail.com> > > --- > > libavcodec/utils.c | 9 +++++---- > > 1 file 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); > > Nit: You could use atomic_fetch_sub() instead of adding -1. > > > if (lockmgr_cb) { > > if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE)) > > return -1; > > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >
Fixed locally _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel