postgresql/src/backend
Alvaro Herrera d2599ecfcc Don't mark pages all-visible spuriously
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 a892234f830e;
later, commit 38e9f90a22 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
2018-05-04 18:24:45 -03:00
..
access Don't mark pages all-visible spuriously 2018-05-04 18:24:45 -03:00
bootstrap Rationalize handling of array type names in bootstrap data. 2018-04-17 18:29:11 -04:00
catalog Fix precedence problem in new Perl code. 2018-05-04 09:46:35 -04:00
commands Clean up warnings from -Wimplicit-fallthrough. 2018-05-01 19:35:08 -04:00
executor Fix SPI error cleanup and memory leak 2018-05-03 08:39:15 -04:00
foreign Remove bogus "extern" annotations on function definitions. 2018-02-19 12:07:44 -05:00
jit Further -Wimplicit-fallthrough cleanup. 2018-05-01 19:53:48 -07:00
lib Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
libpq Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
main Update copyright for 2018 2018-01-02 23:30:12 -05:00
nodes Fix incorrect field type for PlannedStmt.jitFlags in outfuncs/readfuncs. 2018-04-28 16:46:24 -04:00
optimizer Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
parser Clean up warnings from -Wimplicit-fallthrough. 2018-05-01 19:35:08 -04:00
partitioning Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
po Translation updates 2017-08-07 13:55:34 -04:00
port Remove investigative code for can't-reattach-to-shared-memory errors. 2018-05-01 13:06:31 -04:00
postmaster Further improve code for probing the availability of ARM CRC instructions. 2018-05-03 11:32:57 -04:00
regex Clean up warnings from -Wimplicit-fallthrough. 2018-05-01 19:35:08 -04:00
replication Fix some assorted compiler warnings on Windows. 2018-05-01 19:38:26 -04:00
rewrite Simplify view-expansion code in rewriteHandler.c. 2018-04-14 21:01:03 -04:00
snowball Avoid unnecessary use of pg_strcasecmp for already-downcased identifiers. 2018-01-26 18:25:14 -05:00
statistics Fix bogus code for extracting extended-statistics data from syscache. 2018-05-02 12:23:00 -04:00
storage Re-think predicate locking on GIN indexes. 2018-05-04 11:27:50 +03:00
tcop Fix SPI error cleanup and memory leak 2018-05-03 08:39:15 -04:00
tsearch Post-feature-freeze pgindent run. 2018-04-26 14:47:16 -04:00
utils Rearrange makefile rules for running Gen_fmgrtab.pl. 2018-05-03 17:54:18 -04:00
.gitignore Add .gitignore entries for AIX-specific intermediate build artifacts. 2015-07-08 20:44:22 -04:00
Makefile Rearrange makefile rules for running Gen_fmgrtab.pl. 2018-05-03 17:54:18 -04:00
common.mk Remove PARTIAL_LINKING build mode. 2018-03-30 17:33:04 -07:00
nls.mk Translation updates 2017-05-15 12:19:54 -04:00