From 4488b69b4cd388cb557ced8165df8eeb984db73a Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Sun, 8 Aug 1999 20:12:52 +0000 Subject: [PATCH] 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()? --- src/backend/access/nbtree/nbtpage.c | 3 +-- src/backend/access/nbtree/nbtscan.c | 24 +++++++++++++++++++++++- src/backend/access/transam/transam.c | 14 +------------- src/backend/access/transam/xact.c | 8 +++++++- src/include/access/nbtree.h | 3 ++- 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 @@ -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. */ 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 -- GitLab