Skip to content
  • Thomas Guillem's avatar
    coreaudio: replace TPCircularBuffer by os_unfair_lock and a block chain · 9bb14eda
    Thomas Guillem authored
    Remove the usage of TPCircularBuffer and multiple atomic variables that start
    to make this code way too complicated. Replace it by os_unfair_lock and a block
    chain.
    
    os_unfair_lock is a safe spinlock that waits in the kernel in case of thread
    contention.
    
    Fallback to pthread_mutex_t if os_unfair_lock is not availaible (before macOS
    10.12 / iOS 10.0).
    
    The unfairness of this new lock is not an issue here since both locking threads
    (the render callback and the VLC DecoderThread calling aout_DecPlay) will be
    automatically paced (and will let the other thread take the lock). Indeed, the
    render thread need a sample every 22 or 88ms, and the DecoderThread will wait
    for the decoder, wait in the decoder lock, or wait from the aout if the FIFO is
    full.
    9bb14eda