Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix order of arguments to SubTransSetParent().
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Apr 2017 17:10:58 +0000 (13:10 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Apr 2017 17:10:58 +0000 (13:10 -0400)
ProcessTwoPhaseBuffer (formerly StandbyRecoverPreparedTransactions)
mixed up the parent and child XIDs when calling SubTransSetParent to
record the transactions' relationship in pg_subtrans.

Remarkably, analysis by Simon Riggs suggests that this doesn't lead to
visible problems (at least, not in non-Assert builds).  That might
explain why we'd not noticed it before.  Nonetheless, it's surely wrong.

This code was born broken, so back-patch to all supported branches.

Discussion: https://postgr.es/m/20110.1492905318@sss.pgh.pa.us

src/backend/access/transam/twophase.c

index 01aa8cb9b818b9d5a326f35f6bb658c6e5a89a9d..ef448e34f4f4706170f90405ba97068a8fa345a7 100644 (file)
@@ -1934,7 +1934,7 @@ StandbyRecoverPreparedTransactions(bool overwriteOK)
                TransactionId subxid = subxids[i];
 
                Assert(TransactionIdFollows(subxid, xid));
-               SubTransSetParent(xid, subxid, overwriteOK);
+               SubTransSetParent(subxid, xid, overwriteOK);
            }
        }
    }