• T
    Revise FlushRelationBuffers/ReleaseRelationBuffers per discussion with · f923260e
    Tom Lane 提交于
    Hiroshi.  ReleaseRelationBuffers now removes rel's buffers from pool,
    instead of merely marking them nondirty.  The old code would leave valid
    buffers for a deleted relation, which didn't cause any known problems
    but can't possibly be a good idea.  There were several places which called
    ReleaseRelationBuffers *and* FlushRelationBuffers, which is now
    unnecessary; but there were others that did not.  FlushRelationBuffers
    no longer emits a warning notice if it finds dirty buffers to flush,
    because with the current bufmgr behavior that's not an unexpected
    condition.  Also, FlushRelationBuffers will flush out all dirty buffers
    for the relation regardless of block number.  This ensures that
    pg_upgrade's expectations are met about tuple on-row status bits being
    up-to-date on disk.  Lastly, tweak BufTableDelete() to clear the
    buffer's tag so that no one can mistake it for being a still-valid
    buffer for the page it once held.  Formerly, the buffer would not be
    found by buffer hashtable searches after BufTableDelete(), but it would
    still be thought to belong to its old relation by the routines that
    sequentially scan the shared-buffer array.  Again I know of no bugs
    caused by that, but it still can't be a good idea.
    f923260e
bufmgr.h 5.1 KB