On Tue, Mar 7, 2017 at 1:44 PM, wm4 <nfx...@googlemail.com> wrote: > On Tue, 7 Mar 2017 02:47:36 +0700 > Muhammad Faiz <mfc...@gmail.com> wrote: > >> Signed-off-by: Muhammad Faiz <mfc...@gmail.com> >> --- >> libavcodec/allcodecs.c | 13 ++++++++++--- >> 1 file changed, 10 insertions(+), 3 deletions(-) >> >> diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c >> index eee322b..1d05fc1 100644 >> --- a/libavcodec/allcodecs.c >> +++ b/libavcodec/allcodecs.c >> @@ -24,6 +24,8 @@ >> * Provide registration of all codecs, parsers and bitstream filters for >> libavcodec. >> */ >> >> +#include <stdatomic.h> >> + >> #include "config.h" >> #include "avcodec.h" >> #include "version.h" >> @@ -60,11 +62,14 @@ >> >> void avcodec_register_all(void) >> { >> - static int initialized; >> + static atomic_int initialized; >> + static atomic_int ready; >> >> - if (initialized) >> + if (atomic_exchange_explicit(&initialized, 1, memory_order_relaxed)) { >> + while (!atomic_load_explicit(&ready, memory_order_relaxed)) >> + ; >> return; >> - initialized = 1; >> + } >> >> /* hardware accelerators */ >> REGISTER_HWACCEL(H263_VAAPI, h263_vaapi); >> @@ -716,4 +721,6 @@ void avcodec_register_all(void) >> REGISTER_PARSER(VP8, vp8); >> REGISTER_PARSER(VP9, vp9); >> REGISTER_PARSER(XMA, xma); >> + >> + atomic_store_explicit(&ready, 1, memory_order_relaxed); >> } > > avcodec_register() is already "safe" by attempting to do lock-free and > wait-free list insertion (not very convincing IMHO, but it's there). > Should that code be removed? Does anyone know why avcodec_register() is > even still public API? The same affects some other things.
I don't know about these. > > Also, if you want to do it right, please use ff_thread_once() to do it > without busy waiting. It works like pthread_once(), which was invented > to avoid such constructions. Ok, thank's for the suggestion _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel