aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>1999-08-08 20:12:52 +0000
committerTom Lane <tgl@sss.pgh.pa.us>1999-08-08 20:12:52 +0000
commit4488b69b4cd388cb557ced8165df8eeb984db73a (patch)
treeb9a3d566c24d8788ba6c61a9ca7d029198e15963
parentfb491a5854f6883f38bffac0591c754b475695af (diff)
downloadpostgresql-4488b69b4cd388cb557ced8165df8eeb984db73a.tar.gz
postgresql-4488b69b4cd388cb557ced8165df8eeb984db73a.zip
Fix nbtree's failure to clear BTScans list during xact abort.
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()?
-rw-r--r--src/backend/access/nbtree/nbtpage.c3
-rw-r--r--src/backend/access/nbtree/nbtscan.c24
-rw-r--r--src/backend/access/transam/transam.c14
-rw-r--r--src/backend/access/transam/xact.c8
-rw-r--r--src/include/access/nbtree.h3
5 files changed, 34 insertions, 18 deletions
diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c
index 2d30827368f..82550ae1b06 100644
--- a/src/backend/access/nbtree/nbtpage.c
+++ b/src/backend/access/nbtree/nbtpage.c
@@ -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
diff --git a/src/backend/access/nbtree/nbtscan.c b/src/backend/access/nbtree/nbtscan.c
index a655a442eea..f5c1f7b99f8 100644
--- a/src/backend/access/nbtree/nbtscan.c
+++ b/src/backend/access/nbtree/nbtscan.c
@@ -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
@@ -44,6 +44,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.
*/
void
diff --git a/src/backend/access/transam/transam.c b/src/backend/access/transam/transam.c
index 23fe21a35ee..1f44fb357ac 100644
--- a/src/backend/access/transam/transam.c
+++ b/src/backend/access/transam/transam.c
@@ -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;
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 53f38d79962..04711a33bb4 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -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:
@@ -144,9 +144,11 @@
*/
#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();
diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h
index 5e968e49229..7c57a9a4f99 100644
--- a/src/include/access/nbtree.h
+++ b/src/include/access/nbtree.h
@@ -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