aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-08-03 15:57:26 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-08-03 15:57:26 +0000
commita83c45c4c60d5fc3603896f8d149856dbb20c42d (patch)
tree714f4d4f1b2d2a3f677dd1a91820e5904225e357 /src
parent929da8e7f25363d323caef760aaf13f12edbf0df (diff)
downloadpostgresql-a83c45c4c60d5fc3603896f8d149856dbb20c42d.tar.gz
postgresql-a83c45c4c60d5fc3603896f8d149856dbb20c42d.zip
Fix misplacement of savepointLevel test, per report from Chris K-L.
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/transam/xact.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 601519e4e95..4794c761c3a 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.176 2004/08/01 20:57:59 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.177 2004/08/03 15:57:26 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -2520,19 +2520,10 @@ RollbackToSavepoint(List *options)
Assert(PointerIsValid(name));
- target = CurrentTransactionState;
-
- while (target != NULL)
+ for (target = s; PointerIsValid(target); target = target->parent)
{
if (PointerIsValid(target->name) && strcmp(target->name, name) == 0)
break;
- target = target->parent;
-
- /* we don't cross savepoint level boundaries */
- if (target->savepointLevel != s->savepointLevel)
- ereport(ERROR,
- (errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
- errmsg("no such savepoint")));
}
if (!PointerIsValid(target))
@@ -2540,6 +2531,12 @@ RollbackToSavepoint(List *options)
(errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
errmsg("no such savepoint")));
+ /* disallow crossing savepoint level boundaries */
+ if (target->savepointLevel != s->savepointLevel)
+ ereport(ERROR,
+ (errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
+ errmsg("no such savepoint")));
+
/*
* Abort the current subtransaction, if needed. We can't Cleanup the
* savepoint yet, so signal CommitTransactionCommand to do it and