• T
    Clean up WAL/buffer interactions as per my recent proposal. Get rid of the · a8b8f4db
    Tom Lane 提交于
    misleadingly-named WriteBuffer routine, and instead require routines that
    change buffer pages to call MarkBufferDirty (which does exactly what it says).
    We also require that they do so before calling XLogInsert; this takes care of
    the synchronization requirement documented in SyncOneBuffer.  Note that
    because bufmgr takes the buffer content lock (in shared mode) while writing
    out any buffer, it doesn't matter whether MarkBufferDirty is executed before
    the buffer content change is complete, so long as the content change is
    completed before releasing exclusive lock on the buffer.  So it's OK to set
    the dirtybit before we fill in the LSN.
    This eliminates the former kluge of needing to set the dirtybit in LockBuffer.
    Aside from making the code more transparent, we can also add some new
    debugging assertions, in particular that the caller of MarkBufferDirty must
    hold the buffer content lock, not merely a pin.
    a8b8f4db
sequence.c 30.4 KB