• Andres Freund's avatar
    Avoid potential spinlock in a signal handler as part of global barriers. · fd49d538
    Andres Freund authored
    On platforms without support for 64bit atomic operations where we also
    cannot rely on 64bit reads to have single copy atomicity, such atomics
    are implemented using a spinlock based fallback. That means it's not
    safe to even read such atomics from within a signal handler (since the
    signal handler might run when the spinlock already is held).
    
    To avoid this issue defer global barrier processing out of the signal
    handler. Instead of checking local / shared barrier generation to
    determine whether to set ProcSignalBarrierPending, introduce
    PROCSIGNAL_BARRIER and always set ProcSignalBarrierPending when
    receiving such a signal. Additionally avoid redundant work in
    ProcessProcSignalBarrier if ProcSignalBarrierPending is unnecessarily.
    
    Also do a small amount of other polishing.
    
    Author: Andres Freund
    Reviewed-By: Robert Haas
    Discussion: https://postgr.es/m/20200609193723.eu5ilsjxwdpyxhgz@alap3.anarazel.de
    Backpatch: 13-, where the code was introduced.
    fd49d538
procsignal.h 2.4 KB