Always SnapshotResetXmin() during ClearTransaction()
Avoid corner cases during 2PC with 6bad580d9e678a0b604883e14d8401d469b06566
This commit is contained in:
parent
3217327053
commit
cd0cebaf7d
@ -2640,7 +2640,7 @@ CleanupTransaction(void)
|
||||
* do abort cleanup processing
|
||||
*/
|
||||
AtCleanup_Portals(); /* now safe to release portal memory */
|
||||
AtEOXact_Snapshot(false, false); /* and release the transaction's snapshots */
|
||||
AtEOXact_Snapshot(false, true); /* and release the transaction's snapshots */
|
||||
|
||||
CurrentResourceOwner = NULL; /* and resource owner */
|
||||
if (TopTransactionResourceOwner)
|
||||
|
@ -1051,7 +1051,7 @@ AtSubAbort_Snapshot(int level)
|
||||
* Snapshot manager's cleanup function for end of transaction
|
||||
*/
|
||||
void
|
||||
AtEOXact_Snapshot(bool isCommit, bool isPrepare)
|
||||
AtEOXact_Snapshot(bool isCommit, bool resetXmin)
|
||||
{
|
||||
/*
|
||||
* In transaction-snapshot mode we must release our privately-managed
|
||||
@ -1137,16 +1137,15 @@ AtEOXact_Snapshot(bool isCommit, bool isPrepare)
|
||||
FirstSnapshotSet = false;
|
||||
|
||||
/*
|
||||
* During normal commit and abort processing, we call
|
||||
* ProcArrayEndTransaction() or ProcArrayClearTransaction() to
|
||||
* reset the PgXact->xmin. That call happens prior to the call to
|
||||
* AtEOXact_Snapshot(), so we need not touch xmin here at all,
|
||||
* accept when we are preparing a transaction.
|
||||
* During normal commit processing, we call
|
||||
* ProcArrayEndTransaction() to reset the PgXact->xmin. That call
|
||||
* happens prior to the call to AtEOXact_Snapshot(), so we need
|
||||
* not touch xmin here at all.
|
||||
*/
|
||||
if (isPrepare)
|
||||
if (resetXmin)
|
||||
SnapshotResetXmin();
|
||||
|
||||
Assert(isPrepare || MyPgXact->xmin == 0);
|
||||
Assert(resetXmin || MyPgXact->xmin == 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -85,7 +85,7 @@ extern void UnregisterSnapshotFromOwner(Snapshot snapshot, ResourceOwner owner);
|
||||
|
||||
extern void AtSubCommit_Snapshot(int level);
|
||||
extern void AtSubAbort_Snapshot(int level);
|
||||
extern void AtEOXact_Snapshot(bool isCommit, bool isPrepare);
|
||||
extern void AtEOXact_Snapshot(bool isCommit, bool resetXmin);
|
||||
|
||||
extern void ImportSnapshot(const char *idstr);
|
||||
extern bool XactHasExportedSnapshots(void);
|
||||
|
Loading…
x
Reference in New Issue
Block a user