]> granicus.if.org Git - postgresql/commitdiff
Fix nbtree's failure to clear BTScans list during xact abort.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 8 Aug 1999 20:12:52 +0000 (20:12 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 8 Aug 1999 20:12:52 +0000 (20:12 +0000)
Also, move responsibility for calling vc_abort into main xact.c list of
things-to-call-at-abort.  What in the world was it doing down inside of
TransactionIdAbort()?

src/backend/access/nbtree/nbtpage.c
src/backend/access/nbtree/nbtscan.c
src/backend/access/transam/transam.c
src/backend/access/transam/xact.c
src/include/access/nbtree.h

index 2d30827368f369fe15f78e72a24268062c26577a..82550ae1b0670d74f247329154e82ee5a3781150 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.30 1999/07/17 20:16:42 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.31 1999/08/08 20:12:50 tgl Exp $
  *
  *     NOTES
  *        Postgres btree pages look like ordinary relation pages.      The opaque
@@ -42,7 +42,6 @@ typedef struct BTMetaPageData
 #define BTPageGetMeta(p) \
        ((BTMetaPageData *) &((PageHeader) p)->pd_linp[0])
 
-extern bool BuildingBtree;
 
 /*
  *     We use high-concurrency locking on btrees.      There are two cases in
index a655a442eeafe0b86fbf3543f1e8143ef6d3d1e6..f5c1f7b99f8b5dbe847689582207b45a4fa643d8 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.27 1999/07/15 23:03:00 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.28 1999/08/08 20:12:51 tgl Exp $
  *
  *
  * NOTES
@@ -43,6 +43,28 @@ static BTScanList BTScans = (BTScanList) NULL;
 
 static void _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno);
 
+/*
+ * AtEOXact_nbtree() --- clean up nbtree subsystem at xact abort or commit.
+ *
+ * This is here because it needs to touch this module's static var BTScans.
+ */
+void
+AtEOXact_nbtree(void)
+{
+       /* Note: these actions should only be necessary during xact abort;
+        * but they can't hurt during a commit.
+        */
+
+       /* Reset the active-scans list to empty.
+        * We do not need to free the list elements, because they're all
+        * palloc()'d, so they'll go away at end of transaction anyway.
+        */
+       BTScans = NULL;
+
+       /* If we were building a btree, we ain't anymore. */
+       BuildingBtree = false;
+}
+
 /*
  *     _bt_regscan() -- register a new scan.
  */
index 23fe21a35ee05b4cca096818f95d21804c9e0dfe..1f44fb357ac3bc3052deeeabcbc933d288e33240 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.30 1999/07/15 23:03:02 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.31 1999/08/08 20:12:52 tgl Exp $
  *
  * NOTES
  *       This file contains the high level access-method interface to the
@@ -20,7 +20,6 @@
 
 #include "access/heapam.h"
 #include "catalog/catname.h"
-#include "commands/vacuum.h"
 
 static int     RecoveryCheckingEnabled(void);
 static void TransRecover(Relation logRelation);
@@ -83,12 +82,6 @@ int                  RecoveryCheckingEnableState = 0;
  */
 extern int     OidGenLockId;
 
-/* ----------------
- *             globals that must be reset at abort
- * ----------------
- */
-extern bool BuildingBtree;
-
 
 /* ----------------
  *             recovery checking accessors
@@ -568,11 +561,6 @@ TransactionIdCommit(TransactionId transactionId)
 void
 TransactionIdAbort(TransactionId transactionId)
 {
-       BuildingBtree = false;
-
-       if (VacuumRunning)
-               vc_abort();
-
        if (AMI_OVERRIDE)
                return;
 
index 53f38d7996242ac5114c20885ae17d4b44628280..04711a33bb434bd0f513c8a6a0dde09daafbd075 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.46 1999/07/16 04:58:33 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.47 1999/08/08 20:12:52 tgl Exp $
  *
  * NOTES
  *             Transaction aborts can now occur two ways:
  */
 #include "postgres.h"
 
+#include "access/nbtree.h"
 #include "catalog/heap.h"
 #include "commands/async.h"
 #include "commands/sequence.h"
+#include "commands/vacuum.h"
 #include "libpq/be-fsstubs.h"
 #include "storage/proc.h"
 #include "utils/inval.h"
@@ -952,6 +954,7 @@ CommitTransaction()
        }
 
        RelationPurgeLocalRelation(true);
+       AtEOXact_nbtree();
        AtCommit_Cache();
        AtCommit_Locks();
        AtCommit_Memory();
@@ -1013,9 +1016,12 @@ AbortTransaction()
        AtAbort_Notify();
        CloseSequences();
        AtEOXact_portals();
+       if (VacuumRunning)
+               vc_abort();
        RecordTransactionAbort();
        RelationPurgeLocalRelation(false);
        DestroyNoNameRels();
+       AtEOXact_nbtree();
        AtAbort_Cache();
        AtAbort_Locks();
        AtAbort_Memory();
index 5e968e49229a384cb7d78d966b424098760c4208..7c57a9a4f9971a1c3a4c23cc1671549027cddc4c 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: nbtree.h,v 1.30 1999/07/16 17:07:27 momjian Exp $
+ * $Id: nbtree.h,v 1.31 1999/08/08 20:12:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -250,6 +250,7 @@ extern void btdelete(Relation rel, ItemPointer tid);
 extern void _bt_regscan(IndexScanDesc scan);
 extern void _bt_dropscan(IndexScanDesc scan);
 extern void _bt_adjscans(Relation rel, ItemPointer tid);
+extern void AtEOXact_nbtree(void);
 
 /*
  * prototypes for functions in nbtsearch.c