10
10
*
11
11
*
12
12
* 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 $
14
14
*
15
15
*-------------------------------------------------------------------------
16
16
*/
@@ -1333,9 +1333,6 @@ CommitTransaction(void)
1333
1333
* backend-wide state.
1334
1334
*/
1335
1335
1336
- smgrDoPendingDeletes (true);
1337
- /* smgrcommit already done */
1338
-
1339
1336
CallXactCallbacks (XACT_EVENT_COMMIT , InvalidTransactionId );
1340
1337
1341
1338
ResourceOwnerRelease (TopTransactionResourceOwner ,
@@ -1352,6 +1349,14 @@ CommitTransaction(void)
1352
1349
*/
1353
1350
AtEOXact_Inval (true);
1354
1351
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
+
1355
1360
ResourceOwnerRelease (TopTransactionResourceOwner ,
1356
1361
RESOURCE_RELEASE_LOCKS ,
1357
1362
true, true);
@@ -1363,6 +1368,7 @@ CommitTransaction(void)
1363
1368
AtEOXact_SPI (true);
1364
1369
AtEOXact_on_commit_actions (true, s -> transactionIdData );
1365
1370
AtEOXact_Namespace (true);
1371
+ /* smgrcommit already done */
1366
1372
AtEOXact_Files ();
1367
1373
pgstat_count_xact_commit ();
1368
1374
@@ -1481,15 +1487,13 @@ AbortTransaction(void)
1481
1487
* ordering.
1482
1488
*/
1483
1489
1484
- smgrDoPendingDeletes (false);
1485
- smgrabort ();
1486
-
1487
1490
CallXactCallbacks (XACT_EVENT_ABORT , InvalidTransactionId );
1488
1491
1489
1492
ResourceOwnerRelease (TopTransactionResourceOwner ,
1490
1493
RESOURCE_RELEASE_BEFORE_LOCKS ,
1491
1494
false, true);
1492
1495
AtEOXact_Inval (false);
1496
+ smgrDoPendingDeletes (false);
1493
1497
ResourceOwnerRelease (TopTransactionResourceOwner ,
1494
1498
RESOURCE_RELEASE_LOCKS ,
1495
1499
false, true);
@@ -1501,6 +1505,7 @@ AbortTransaction(void)
1501
1505
AtEOXact_SPI (false);
1502
1506
AtEOXact_on_commit_actions (false, s -> transactionIdData );
1503
1507
AtEOXact_Namespace (false);
1508
+ smgrabort ();
1504
1509
AtEOXact_Files ();
1505
1510
pgstat_count_xact_rollback ();
1506
1511
@@ -3014,7 +3019,6 @@ CommitSubTransaction(void)
3014
3019
AtSubCommit_Notify ();
3015
3020
AtEOSubXact_UpdatePasswordFile (true, s -> transactionIdData ,
3016
3021
s -> parent -> transactionIdData );
3017
- AtSubCommit_smgr ();
3018
3022
3019
3023
CallXactCallbacks (XACT_EVENT_COMMIT_SUB , s -> parent -> transactionIdData );
3020
3024
@@ -3024,6 +3028,7 @@ CommitSubTransaction(void)
3024
3028
AtEOSubXact_RelationCache (true, s -> transactionIdData ,
3025
3029
s -> parent -> transactionIdData );
3026
3030
AtEOSubXact_Inval (true);
3031
+ AtSubCommit_smgr ();
3027
3032
ResourceOwnerRelease (s -> curTransactionOwner ,
3028
3033
RESOURCE_RELEASE_LOCKS ,
3029
3034
true, false);
@@ -3109,8 +3114,6 @@ AbortSubTransaction(void)
3109
3114
RecordSubTransactionAbort ();
3110
3115
3111
3116
/* Post-abort cleanup */
3112
- AtSubAbort_smgr ();
3113
-
3114
3117
CallXactCallbacks (XACT_EVENT_ABORT_SUB , s -> parent -> transactionIdData );
3115
3118
3116
3119
ResourceOwnerRelease (s -> curTransactionOwner ,
@@ -3119,6 +3122,7 @@ AbortSubTransaction(void)
3119
3122
AtEOSubXact_RelationCache (false, s -> transactionIdData ,
3120
3123
s -> parent -> transactionIdData );
3121
3124
AtEOSubXact_Inval (false);
3125
+ AtSubAbort_smgr ();
3122
3126
ResourceOwnerRelease (s -> curTransactionOwner ,
3123
3127
RESOURCE_RELEASE_LOCKS ,
3124
3128
false, false);
0 commit comments