mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
@ -2137,7 +2137,7 @@ CommitTransaction(void)
|
|||||||
AtEOXact_ComboCid();
|
AtEOXact_ComboCid();
|
||||||
AtEOXact_HashTables(true);
|
AtEOXact_HashTables(true);
|
||||||
AtEOXact_PgStat(true);
|
AtEOXact_PgStat(true);
|
||||||
AtEOXact_Snapshot(true, false);
|
AtEOXact_Snapshot(true);
|
||||||
AtCommit_ApplyLauncher();
|
AtCommit_ApplyLauncher();
|
||||||
pgstat_report_xact_timestamp(0);
|
pgstat_report_xact_timestamp(0);
|
||||||
|
|
||||||
@ -2409,7 +2409,7 @@ PrepareTransaction(void)
|
|||||||
AtEOXact_ComboCid();
|
AtEOXact_ComboCid();
|
||||||
AtEOXact_HashTables(true);
|
AtEOXact_HashTables(true);
|
||||||
/* don't call AtEOXact_PgStat here; we fixed pgstat state above */
|
/* don't call AtEOXact_PgStat here; we fixed pgstat state above */
|
||||||
AtEOXact_Snapshot(true, true);
|
AtEOXact_Snapshot(true);
|
||||||
pgstat_report_xact_timestamp(0);
|
pgstat_report_xact_timestamp(0);
|
||||||
|
|
||||||
CurrentResourceOwner = NULL;
|
CurrentResourceOwner = NULL;
|
||||||
@ -2640,7 +2640,7 @@ CleanupTransaction(void)
|
|||||||
* do abort cleanup processing
|
* do abort cleanup processing
|
||||||
*/
|
*/
|
||||||
AtCleanup_Portals(); /* now safe to release portal memory */
|
AtCleanup_Portals(); /* now safe to release portal memory */
|
||||||
AtEOXact_Snapshot(false, false); /* and release the transaction's snapshots */
|
AtEOXact_Snapshot(false); /* and release the transaction's snapshots */
|
||||||
|
|
||||||
CurrentResourceOwner = NULL; /* and resource owner */
|
CurrentResourceOwner = NULL; /* and resource owner */
|
||||||
if (TopTransactionResourceOwner)
|
if (TopTransactionResourceOwner)
|
||||||
|
@ -954,12 +954,7 @@ xmin_cmp(const pairingheap_node *a, const pairingheap_node *b, void *arg)
|
|||||||
*
|
*
|
||||||
* If there are no more snapshots, we can reset our PGXACT->xmin to InvalidXid.
|
* If there are no more snapshots, we can reset our PGXACT->xmin to InvalidXid.
|
||||||
* Note we can do this without locking because we assume that storing an Xid
|
* Note we can do this without locking because we assume that storing an Xid
|
||||||
* is atomic. We do this because it will allow multi-statement transactions to
|
* is atomic.
|
||||||
* reset their xmin and prevent us from holding back removal of dead rows;
|
|
||||||
* this has little purpose when we are dealing with very fast statements in
|
|
||||||
* read committed mode since the xmin will advance quickly anyway. It has no
|
|
||||||
* use at all when we are running single statement transactions since the xmin
|
|
||||||
* is reset as part of end of transaction anyway.
|
|
||||||
*
|
*
|
||||||
* Even if there are some remaining snapshots, we may be able to advance our
|
* Even if there are some remaining snapshots, we may be able to advance our
|
||||||
* PGXACT->xmin to some degree. This typically happens when a portal is
|
* PGXACT->xmin to some degree. This typically happens when a portal is
|
||||||
@ -1056,7 +1051,7 @@ AtSubAbort_Snapshot(int level)
|
|||||||
* Snapshot manager's cleanup function for end of transaction
|
* Snapshot manager's cleanup function for end of transaction
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
AtEOXact_Snapshot(bool isCommit, bool isPrepare)
|
AtEOXact_Snapshot(bool isCommit)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* In transaction-snapshot mode we must release our privately-managed
|
* In transaction-snapshot mode we must release our privately-managed
|
||||||
@ -1141,17 +1136,7 @@ AtEOXact_Snapshot(bool isCommit, bool isPrepare)
|
|||||||
|
|
||||||
FirstSnapshotSet = false;
|
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.
|
|
||||||
*/
|
|
||||||
if (isPrepare)
|
|
||||||
SnapshotResetXmin();
|
SnapshotResetXmin();
|
||||||
|
|
||||||
Assert(MyPgXact->xmin == 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ extern void UnregisterSnapshotFromOwner(Snapshot snapshot, ResourceOwner owner);
|
|||||||
|
|
||||||
extern void AtSubCommit_Snapshot(int level);
|
extern void AtSubCommit_Snapshot(int level);
|
||||||
extern void AtSubAbort_Snapshot(int level);
|
extern void AtSubAbort_Snapshot(int level);
|
||||||
extern void AtEOXact_Snapshot(bool isCommit, bool isPrepare);
|
extern void AtEOXact_Snapshot(bool isCommit);
|
||||||
|
|
||||||
extern void ImportSnapshot(const char *idstr);
|
extern void ImportSnapshot(const char *idstr);
|
||||||
extern bool XactHasExportedSnapshots(void);
|
extern bool XactHasExportedSnapshots(void);
|
||||||
|
Reference in New Issue
Block a user