• Wan-Teh Chang's avatar
    avutil: fix data race in av_get_cpu_flags() · 2170017a
    Wan-Teh Chang authored
    Make the one-time initialization in av_get_cpu_flags() thread-safe. The
    static variables |flags|, |cpuflags_mask|, and |checked| in
    libavutil/cpu.c are 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.
    
    Remove the |checked| variable because the invalid value of -1 for
    |flags| can be used to indicate the same condition. Rename |flags| to
    |cpu_flags| and move it to file scope.
    
    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>
    2170017a
cpu.c 7.89 KB