aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/xact.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/transam/xact.c')
-rw-r--r--src/backend/access/transam/xact.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 17db7dd78d5..321a86f30c2 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.190 2004/09/16 20:17:16 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.191 2004/10/04 21:52:14 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -205,6 +205,7 @@ static void AssignSubTransactionId(TransactionState s);
static void AbortTransaction(void);
static void AtAbort_Memory(void);
static void AtCleanup_Memory(void);
+static void AtAbort_ResourceOwner(void);
static void AtCommit_LocalCache(void);
static void AtCommit_Memory(void);
static void AtStart_Cache(void);
@@ -229,6 +230,7 @@ static void PopTransaction(void);
static void AtSubAbort_Memory(void);
static void AtSubCleanup_Memory(void);
+static void AtSubAbort_ResourceOwner(void);
static void AtSubCommit_Memory(void);
static void AtSubStart_Memory(void);
static void AtSubStart_ResourceOwner(void);
@@ -1103,7 +1105,6 @@ AtAbort_Memory(void)
MemoryContextSwitchTo(TopMemoryContext);
}
-
/*
* AtSubAbort_Memory
*/
@@ -1115,6 +1116,33 @@ AtSubAbort_Memory(void)
MemoryContextSwitchTo(TopTransactionContext);
}
+
+/*
+ * AtAbort_ResourceOwner
+ */
+static void
+AtAbort_ResourceOwner(void)
+{
+ /*
+ * Make sure we have a valid ResourceOwner, if possible (else it
+ * will be NULL, which is OK)
+ */
+ CurrentResourceOwner = TopTransactionResourceOwner;
+}
+
+/*
+ * AtSubAbort_ResourceOwner
+ */
+static void
+AtSubAbort_ResourceOwner(void)
+{
+ TransactionState s = CurrentTransactionState;
+
+ /* Make sure we have a valid ResourceOwner */
+ CurrentResourceOwner = s->curTransactionOwner;
+}
+
+
/*
* AtSubAbort_childXids
*/
@@ -1598,8 +1626,9 @@ AbortTransaction(void)
*/
s->state = TRANS_ABORT;
- /* Make sure we are in a valid memory context */
+ /* Make sure we have a valid memory context and resource owner */
AtAbort_Memory();
+ AtAbort_ResourceOwner();
/*
* Reset user id which might have been changed transiently. We cannot
@@ -3338,6 +3367,7 @@ AbortSubTransaction(void)
* do abort processing
*/
AtSubAbort_Memory();
+ AtSubAbort_ResourceOwner();
/*
* We can skip all this stuff if the subxact failed before creating