postgres.git / summary / log / commit / refs

commit    7be47c56af3d3013955c91c2877c08f2a0e3e6a2
Author:   Robert Haas <rhaas@postgresql.org>
Date:     Thu May 07 15:00:47 2015 +0000
First released in: 9.5.0, 9.3.7, 9.4.2

    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.


src/backend/access/transam/multixact.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 928f9fe5d6c..cbb69f5e10c 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -2495,7 +2495,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 */ [parent: 82ec7c95b701]