• Heikki Linnakangas's avatar
    Fix deadlock with LWLockAcquireWithVar and LWLockWaitForVar. · e0d97d77
    Heikki Linnakangas authored
    LWLockRelease should release all backends waiting with LWLockWaitForVar,
    even when another backend has already been woken up to acquire the lock,
    i.e. when releaseOK is false. LWLockWaitForVar can return as soon as the
    protected value changes, even if the other backend will acquire the lock.
    Fix that by resetting releaseOK to true in LWLockWaitForVar, whenever
    adding itself to the wait queue.
    
    This should fix the bug reported by MauMau, where the system occasionally
    hangs when there is a lot of concurrent WAL activity and a checkpoint.
    Backpatch to 9.4, where this code was added.
    e0d97d77
lwlock.c 33.7 KB