• Robert Haas's avatar
    Remove CheckpointLock. · d18e7566
    Robert Haas authored
    Up until now, we've held this lock when performing a checkpoint or
    restartpoint, but commit 076a055a back
    in 2004 and commit 7e48b77b from 2009,
    taken together, have removed all need for this. In the present code,
    there's only ever one process entitled to attempt a checkpoint: either
    the checkpointer, during normal operation, or the postmaster, during
    single-user operation. So, we don't need the lock.
    
    One possible concern in making this change is that it means that
    a substantial amount of code where HOLD_INTERRUPTS() was previously
    in effect due to the preceding LWLockAcquire() will now be
    running without that. This could mean that ProcessInterrupts()
    gets called in places from which it didn't before. However, this
    seems unlikely to do very much, because the checkpointer doesn't
    have any signal mapped to die(), so it's not clear how,
    for example, ProcDiePending = true could happen in the first
    place. Similarly with ClientConnectionLost and recovery conflicts.
    
    Also, if there are any such problems, we might want to fix them
    rather than reverting this, since running lots of code with
    interrupt handling suspended is generally bad.
    
    Patch by me, per an inquiry by Amul Sul. Review by Tom Lane
    and Michael Paquier.
    
    Discussion: http://postgr.es/m/CAAJ_b97XnBBfYeSREDJorFsyoD1sHgqnNuCi=02mNQBUMnA=FA@mail.gmail.com
    d18e7566
lwlocknames.txt 1.65 KB