diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2004-08-03 15:57:26 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2004-08-03 15:57:26 +0000 |
commit | a83c45c4c60d5fc3603896f8d149856dbb20c42d (patch) | |
tree | 714f4d4f1b2d2a3f677dd1a91820e5904225e357 /src | |
parent | 929da8e7f25363d323caef760aaf13f12edbf0df (diff) | |
download | postgresql-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.c | 19 |
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 |