[FFmpeg-devel] [PATCH 001/114] avcodec/bitstream: Add second function to create VLCs
Anton Khirnov
anton at khirnov.net
Sat Nov 14 11:57:30 EET 2020
Quoting Andreas Rheinhardt (2020-11-12 21:51:28)
> Derek Buitenhuis:
> > On 10/11/2020 10:46, Andreas Rheinhardt wrote:
> >>
> >> +#define INIT_VLC_STATIC_FROM_LENGTHS(vlc, bits, nb_codes, lens, len_wrap, \
> >> + symbols, symbols_wrap, symbols_size, \
> >> + offset, flags, static_size) \
> >> + do { \
> >> + static VLC_TYPE table[static_size][2]; \
> >> + (vlc)->table = table; \
> >> + (vlc)->table_allocated = static_size; \
> >> + ff_init_vlc_from_lengths(vlc, bits, nb_codes, lens, len_wrap, \
> >> + symbols, symbols_wrap, symbols_size, \
> >> + offset, flags | INIT_VLC_USE_NEW_STATIC); \
> >> + } while (0)
> >
> > If I am reading correctly, wherever you add/use this, you are adding non-thread
> > safe global init code to a decoder. This is a huge step back and not acceptable.
> >
> > It should be made to properly use ff_thread_once if possible, or reworked.
> >
> The ff_init_vlc_... functions are inherently thread-safe: Everything is
> modified only once and directly set to its final value; so it's no
> problem if two threads are initializing the same static VLC at the same
> time.
Strictly speaking it's still a race (and therefore UB), even if you
store the same values. I suspect tools like tsan will not like it
either.
--
Anton Khirnov
More information about the ffmpeg-devel
mailing list