diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 601519e4e9..4794c761c3 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