]> granicus.if.org Git - postgresql/commitdiff
Now that TransactionIdDidAbort doesn't think it should try to modify
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 28 Aug 2004 22:04:12 +0000 (22:04 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 28 Aug 2004 22:04:12 +0000 (22:04 +0000)
pg_clog, there's no reason to do abort marking of subtransactions in a
nonintuitive order.

src/backend/access/transam/xact.c

index 56ae070acb7de34cb5c01ddbc9eec8f60ee96024..39f6c68a6b2d1357274083eb3d1b96a7cc2d75a8 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.180 2004/08/28 20:31:43 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.181 2004/08/28 22:04:12 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -920,12 +920,12 @@ RecordTransactionAbort(void)
                 * necessary but we may as well do it while we are here.
                 *
                 * The ordering here isn't critical but it seems best to mark the
-                * parent last.  That reduces the chance that concurrent
-                * TransactionIdDidAbort calls will decide they need to do redundant
-                * work.
+                * parent first.  This assures an atomic transition of all the
+                * subtransactions to aborted state from the point of view of
+                * concurrent TransactionIdDidAbort calls.
                 */
-               TransactionIdAbortTree(nchildren, children);
                TransactionIdAbort(xid);
+               TransactionIdAbortTree(nchildren, children);
 
                END_CRIT_SECTION();
        }
@@ -1062,8 +1062,8 @@ RecordSubTransactionAbort(void)
                 * Mark the transaction aborted in clog.  This is not absolutely
                 * necessary but we may as well do it while we are here.
                 */
-               TransactionIdAbortTree(nchildren, children);
                TransactionIdAbort(xid);
+               TransactionIdAbortTree(nchildren, children);
 
                END_CRIT_SECTION();
        }