1010 *
1111 *
1212 * IDENTIFICATION
13- * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.185 2004/08/30 19:00:03 tgl Exp $
13+ * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.186 2004/09/06 17:56:04 tgl Exp $
1414 *
1515 *-------------------------------------------------------------------------
1616 */
@@ -1333,9 +1333,6 @@ CommitTransaction(void)
13331333 * backend-wide state.
13341334 */
13351335
1336- smgrDoPendingDeletes (true);
1337- /* smgrcommit already done */
1338-
13391336CallXactCallbacks (XACT_EVENT_COMMIT ,InvalidTransactionId );
13401337
13411338ResourceOwnerRelease (TopTransactionResourceOwner ,
@@ -1352,6 +1349,14 @@ CommitTransaction(void)
13521349 */
13531350AtEOXact_Inval (true);
13541351
1352+ /*
1353+ * Likewise, dropping of files deleted during the transaction is best done
1354+ * after releasing relcache and buffer pins. (This is not strictly
1355+ * necessary during commit, since such pins should have been released
1356+ * already, but this ordering is definitely critical during abort.)
1357+ */
1358+ smgrDoPendingDeletes (true);
1359+
13551360ResourceOwnerRelease (TopTransactionResourceOwner ,
13561361RESOURCE_RELEASE_LOCKS ,
13571362 true, true);
@@ -1363,6 +1368,7 @@ CommitTransaction(void)
13631368AtEOXact_SPI (true);
13641369AtEOXact_on_commit_actions (true,s -> transactionIdData );
13651370AtEOXact_Namespace (true);
1371+ /* smgrcommit already done */
13661372AtEOXact_Files ();
13671373pgstat_count_xact_commit ();
13681374
@@ -1481,15 +1487,13 @@ AbortTransaction(void)
14811487 * ordering.
14821488 */
14831489
1484- smgrDoPendingDeletes (false);
1485- smgrabort ();
1486-
14871490CallXactCallbacks (XACT_EVENT_ABORT ,InvalidTransactionId );
14881491
14891492ResourceOwnerRelease (TopTransactionResourceOwner ,
14901493RESOURCE_RELEASE_BEFORE_LOCKS ,
14911494 false, true);
14921495AtEOXact_Inval (false);
1496+ smgrDoPendingDeletes (false);
14931497ResourceOwnerRelease (TopTransactionResourceOwner ,
14941498RESOURCE_RELEASE_LOCKS ,
14951499 false, true);
@@ -1501,6 +1505,7 @@ AbortTransaction(void)
15011505AtEOXact_SPI (false);
15021506AtEOXact_on_commit_actions (false,s -> transactionIdData );
15031507AtEOXact_Namespace (false);
1508+ smgrabort ();
15041509AtEOXact_Files ();
15051510pgstat_count_xact_rollback ();
15061511
@@ -3014,7 +3019,6 @@ CommitSubTransaction(void)
30143019AtSubCommit_Notify ();
30153020AtEOSubXact_UpdatePasswordFile (true,s -> transactionIdData ,
30163021s -> parent -> transactionIdData );
3017- AtSubCommit_smgr ();
30183022
30193023CallXactCallbacks (XACT_EVENT_COMMIT_SUB ,s -> parent -> transactionIdData );
30203024
@@ -3024,6 +3028,7 @@ CommitSubTransaction(void)
30243028AtEOSubXact_RelationCache (true,s -> transactionIdData ,
30253029s -> parent -> transactionIdData );
30263030AtEOSubXact_Inval (true);
3031+ AtSubCommit_smgr ();
30273032ResourceOwnerRelease (s -> curTransactionOwner ,
30283033RESOURCE_RELEASE_LOCKS ,
30293034 true, false);
@@ -3109,8 +3114,6 @@ AbortSubTransaction(void)
31093114RecordSubTransactionAbort ();
31103115
31113116/* Post-abort cleanup */
3112- AtSubAbort_smgr ();
3113-
31143117CallXactCallbacks (XACT_EVENT_ABORT_SUB ,s -> parent -> transactionIdData );
31153118
31163119ResourceOwnerRelease (s -> curTransactionOwner ,
@@ -3119,6 +3122,7 @@ AbortSubTransaction(void)
31193122AtEOSubXact_RelationCache (false,s -> transactionIdData ,
31203123s -> parent -> transactionIdData );
31213124AtEOSubXact_Inval (false);
3125+ AtSubAbort_smgr ();
31223126ResourceOwnerRelease (s -> curTransactionOwner ,
31233127RESOURCE_RELEASE_LOCKS ,
31243128 false, false);