[FFmpeg-cvslog] avcodec/util: use a mutex instead of atomics in avcodec_register()

James Almer git at videolan.org
Fri Jan 5 18:18:45 EET 2018


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Thu Jan  4 15:11:31 2018 -0300| [9ed4ebc530dde681943389b1f97db90b546ad38d] | committer: James Almer

avcodec/util: use a mutex instead of atomics in avcodec_register()

Reviewed-by: wm4 <nfxjfg at googlemail.com>
Signed-off-by: James Almer <jamrial at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9ed4ebc530dde681943389b1f97db90b546ad38d
---

 libavcodec/utils.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index dfbfe98d63..4d736d2e7d 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -26,7 +26,6 @@
  */
 
 #include "config.h"
-#include "libavutil/atomic.h"
 #include "libavutil/attributes.h"
 #include "libavutil/avassert.h"
 #include "libavutil/avstring.h"
@@ -127,17 +126,24 @@ int av_codec_is_decoder(const AVCodec *codec)
     return codec && (codec->decode || codec->receive_frame);
 }
 
+static AVMutex codec_register_mutex = AV_MUTEX_INITIALIZER;
+
 av_cold void avcodec_register(AVCodec *codec)
 {
     AVCodec **p;
     avcodec_init();
+
+    ff_mutex_lock(&codec_register_mutex);
     p = last_avcodec;
-    codec->next = NULL;
 
-    while(*p || avpriv_atomic_ptr_cas((void * volatile *)p, NULL, codec))
+    while (*p)
         p = &(*p)->next;
+    *p          = codec;
+    codec->next = NULL;
     last_avcodec = &codec->next;
 
+    ff_mutex_unlock(&codec_register_mutex);
+
     if (codec->init_static_data)
         codec->init_static_data(codec);
 }



More information about the ffmpeg-cvslog mailing list