aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2015-05-07 11:00:47 -0400
committerRobert Haas <rhaas@postgresql.org>2015-05-07 11:16:41 -0400
commit83fbd9b59906c8543c165c738fc449af24491e63 (patch)
treed7c7a79e432bbb82f27055c1feffe3f82d4cb79f
parentba3caee8438e631eec2ddcbe7f4b87f70fbfc027 (diff)
downloadpostgresql-83fbd9b59906c8543c165c738fc449af24491e63.tar.gz
postgresql-83fbd9b59906c8543c165c738fc449af24491e63.zip
Fix incorrect math in DetermineSafeOldestOffset.
The old formula didn't have enough parentheses, so it would do the wrong thing, and it used / rather than % to find a remainder. The effect of these oversights is that the stop point chosen by the logic introduced in commit b69bf30b9bfacafc733a9ba77c9587cf54d06c0c might be rather meaningless. Thomas Munro, reviewed by Kevin Grittner, with a whitespace tweak by me.
-rw-r--r--src/backend/access/transam/multixact.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c
index 5532dc6fc82..424cceb1cf0 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -2514,7 +2514,8 @@ DetermineSafeOldestOffset(MultiXactId oldestMXact)
*/
oldestOffset = find_multixact_start(oldestMXact);
/* move back to start of the corresponding segment */
- oldestOffset -= oldestOffset / MULTIXACT_MEMBERS_PER_PAGE * SLRU_PAGES_PER_SEGMENT;
+ oldestOffset -= oldestOffset %
+ (MULTIXACT_MEMBERS_PER_PAGE * SLRU_PAGES_PER_SEGMENT);
LWLockAcquire(MultiXactGenLock, LW_EXCLUSIVE);
/* always leave one segment before the wraparound point */