• Wan-Teh Chang's avatar
    avutil: fix data race in av_get_cpu_flags() · fed50c43
    Wan-Teh Chang authored
    Make the one-time initialization in av_get_cpu_flags() thread-safe. The
    static variable |cpu_flags| in libavutil/cpu.c is read and written using
    normal load and store operations. These are considered as data races.
    The fix is to use atomic load and store operations.
    
    The fix can be verified by running the libavutil/tests/cpu_init.c test
    program under ThreadSanitizer:
        ./configure --toolchain=clang-tsan
        make libavutil/tests/cpu_init
        libavutil/tests/cpu_init
    
    There should be no warnings from ThreadSanitizer.
    
    Co-author: Dmitry Vyukov of Google, who suggested the data race fix.
    Signed-off-by: 's avatarWan-Teh Chang <wtc@google.com>
    Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
    fed50c43
Name
Last commit
Last update
..
aarch64 Loading commit data...
arm Loading commit data...
avr32 Loading commit data...
bfin Loading commit data...
mips Loading commit data...
ppc Loading commit data...
sh4 Loading commit data...
tests Loading commit data...
tomi Loading commit data...
x86 Loading commit data...
.gitignore Loading commit data...
Makefile Loading commit data...
adler32.c Loading commit data...
adler32.h Loading commit data...
aes.c Loading commit data...
aes.h Loading commit data...
aes_ctr.c Loading commit data...
aes_ctr.h Loading commit data...
aes_internal.h Loading commit data...
atomic.c Loading commit data...
atomic.h Loading commit data...
atomic_gcc.h Loading commit data...
atomic_suncc.h Loading commit data...
atomic_win32.h Loading commit data...
attributes.h Loading commit data...
audio_fifo.c Loading commit data...
audio_fifo.h Loading commit data...
avassert.h Loading commit data...
avstring.c Loading commit data...
avstring.h Loading commit data...
avutil.h Loading commit data...
avutilres.rc Loading commit data...
base64.c Loading commit data...
base64.h Loading commit data...
blowfish.c Loading commit data...
blowfish.h Loading commit data...
bprint.c Loading commit data...
bprint.h Loading commit data...
bswap.h Loading commit data...
buffer.c Loading commit data...
buffer.h Loading commit data...
buffer_internal.h Loading commit data...
camellia.c Loading commit data...
camellia.h Loading commit data...
cast5.c Loading commit data...
cast5.h Loading commit data...
channel_layout.c Loading commit data...
channel_layout.h Loading commit data...
color_utils.c Loading commit data...
color_utils.h Loading commit data...
colorspace.h Loading commit data...
common.h Loading commit data...
cpu.c Loading commit data...
cpu.h Loading commit data...
cpu_internal.h Loading commit data...
crc.c Loading commit data...
crc.h Loading commit data...
des.c Loading commit data...
des.h Loading commit data...
dict.c Loading commit data...
dict.h Loading commit data...
display.c Loading commit data...
display.h Loading commit data...
downmix_info.c Loading commit data...
downmix_info.h Loading commit data...
dynarray.h Loading commit data...
error.c Loading commit data...
error.h Loading commit data...
eval.c Loading commit data...
eval.h Loading commit data...
ffmath.h Loading commit data...
fifo.c Loading commit data...
fifo.h Loading commit data...
file.c Loading commit data...
file.h Loading commit data...
file_open.c Loading commit data...
fixed_dsp.c Loading commit data...
fixed_dsp.h Loading commit data...
float_dsp.c Loading commit data...
float_dsp.h Loading commit data...
frame.c Loading commit data...
frame.h Loading commit data...
hash.c Loading commit data...
hash.h Loading commit data...
hmac.c Loading commit data...
hmac.h Loading commit data...
hwcontext.c Loading commit data...
hwcontext.h Loading commit data...
hwcontext_cuda.c Loading commit data...
hwcontext_cuda.h Loading commit data...
hwcontext_cuda_internal.h Loading commit data...
hwcontext_dxva2.c Loading commit data...
hwcontext_dxva2.h Loading commit data...
hwcontext_internal.h Loading commit data...
hwcontext_qsv.c Loading commit data...
hwcontext_qsv.h Loading commit data...
hwcontext_vaapi.c Loading commit data...
hwcontext_vaapi.h Loading commit data...
hwcontext_vdpau.c Loading commit data...
hwcontext_vdpau.h Loading commit data...
imgutils.c Loading commit data...
imgutils.h Loading commit data...
integer.c Loading commit data...
integer.h Loading commit data...
internal.h Loading commit data...
intfloat.h Loading commit data...
intmath.c Loading commit data...
intmath.h Loading commit data...
intreadwrite.h Loading commit data...
lfg.c Loading commit data...
lfg.h Loading commit data...
libavutil.v Loading commit data...
libm.h Loading commit data...
lls.c Loading commit data...
lls.h Loading commit data...
log.c Loading commit data...
log.h Loading commit data...
log2_tab.c Loading commit data...
lzo.c Loading commit data...
lzo.h Loading commit data...
macros.h Loading commit data...
mastering_display_metadata.c Loading commit data...
mastering_display_metadata.h Loading commit data...
mathematics.c Loading commit data...
mathematics.h Loading commit data...
md5.c Loading commit data...
md5.h Loading commit data...
mem.c Loading commit data...
mem.h Loading commit data...
mem_internal.h Loading commit data...
motion_vector.h Loading commit data...
murmur3.c Loading commit data...
murmur3.h Loading commit data...
opencl.c Loading commit data...
opencl.h Loading commit data...
opencl_internal.c Loading commit data...
opencl_internal.h Loading commit data...
opt.c Loading commit data...
opt.h Loading commit data...
parseutils.c Loading commit data...
parseutils.h Loading commit data...
pca.c Loading commit data...
pca.h Loading commit data...
pixdesc.c Loading commit data...
pixdesc.h Loading commit data...
pixelutils.c Loading commit data...
pixelutils.h Loading commit data...
pixfmt.h Loading commit data...
qsort.h Loading commit data...
random_seed.c Loading commit data...
random_seed.h Loading commit data...
rational.c Loading commit data...
rational.h Loading commit data...
rc4.c Loading commit data...
rc4.h Loading commit data...
replaygain.h Loading commit data...
reverse.c Loading commit data...
ripemd.c Loading commit data...
ripemd.h Loading commit data...
samplefmt.c Loading commit data...
samplefmt.h Loading commit data...
sha.c Loading commit data...
sha.h Loading commit data...
sha512.c Loading commit data...
sha512.h Loading commit data...
softfloat.h Loading commit data...
softfloat_ieee754.h Loading commit data...
softfloat_tables.h Loading commit data...
spherical.c Loading commit data...
spherical.h Loading commit data...
stereo3d.c Loading commit data...
stereo3d.h Loading commit data...
tablegen.h Loading commit data...
tea.c Loading commit data...
tea.h Loading commit data...
thread.h Loading commit data...
threadmessage.c Loading commit data...
threadmessage.h Loading commit data...
time.c Loading commit data...
time.h Loading commit data...
time_internal.h Loading commit data...
timecode.c Loading commit data...
timecode.h Loading commit data...
timer.h Loading commit data...
timestamp.h Loading commit data...
tree.c Loading commit data...
tree.h Loading commit data...
twofish.c Loading commit data...
twofish.h Loading commit data...
utils.c Loading commit data...
version.h Loading commit data...
wchar_filename.h Loading commit data...
xga_font_data.c Loading commit data...
xga_font_data.h Loading commit data...
xtea.c Loading commit data...
xtea.h Loading commit data...