• Alvaro Herrera's avatar
    Don't mark pages all-visible spuriously · d2599ecf
    Alvaro Herrera authored
    Dan Wood diagnosed a long-standing problem that pages containing tuples
    that are locked by multixacts containing live lockers may spuriously end
    up as candidates for getting their all-visible flag set.  This has the
    long-term effect that multixacts remain unfrozen; this may previously
    pass undetected, but since commit XYZ it would be reported as
      "ERROR: found multixact 134100944 from before relminmxid 192042633"
    because when a later vacuum tries to freeze the page it detects that a
    multixact that should have gotten frozen, wasn't.
    
    Dan proposed a (correct) patch that simply sets a variable to its
    correct value, after a bogus initialization.  But, per discussion, it
    seems better coding to avoid the bogus initializations altogether, since
    they could give rise to more bugs later.  Therefore this fix rewrites
    the logic a little bit to avoid depending on the bogus initializations.
    
    This bug was part of a family introduced in 9.6 by commit a892234f;
    later, commit 38e9f90a fixed most of them, but this one was
    unnoticed.
    
    Authors: Dan Wood, Pavan Deolasee, Álvaro Herrera
    Reviewed-by: Masahiko Sawada, Pavan Deolasee, Álvaro Herrera
    Discussion: https://postgr.es/m/84EBAC55-F06D-4FBE-A3F3-8BDA093CE3E3@amazon.com
    d2599ecf
heapam.c 283 KB