• Peter Boström's avatar
    Add atomics to vp8 synchronization primitives. · d42e8761
    Peter Boström authored
    Fixes issue on iPad Pro 10.5 (and probably other places) where threads
    are not properly synchronized. On x86 this data race was benign as load
    and store instructions are atomic, they were being atomic in practice as
    the program hasn't been observed to be miscompiled.
    
    Such guarantees are not made outside x86, and real problems manifested
    where libvpx reliably reproduced a broken bitstream for even just the
    initial keyframe. This was detected in WebRTC where this device started
    using multithreading (as its CPU count is higher than earlier devices,
    where the problem did not manifest as single-threading was used in
    practice).
    
    This issue was not detected under thread-sanitizer bots as mutexes were
    conditionally used under this platform to simulate the protected read
    and write semantics that were in practice provided on x86 platforms.
    
    This change also removes several mutexes, so encoder/decoder state is
    lighter-weight after this change and we do not need to initialize so
    many mutexes (this was done even on non-thread-sanitizer platforms where
    they were unused).
    
    Change-Id: If41fcb0d99944f7bbc8ec40877cdc34d672ae72a
    d42e8761