Attached is a patch fixing this.

One question I do have:

        if (target->savepointLevel != s->savepointLevel)

Will this ever be true in the current code? I cannot see anything setting
savepointLevel explicitly.

Gavin
Index: src/backend/access/transam/xact.c
===================================================================
RCS file: /usr/local/cvsroot/pgsql-server/src/backend/access/transam/xact.c,v
retrieving revision 1.176
diff -2 -c -r1.176 xact.c
*** src/backend/access/transam/xact.c   1 Aug 2004 20:57:59 -0000       1.176
--- src/backend/access/transam/xact.c   3 Aug 2004 11:08:02 -0000
***************
*** 2523,2532 ****
        target = CurrentTransactionState;
  
-       while (target != NULL)
-       {
-               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)
--- 2523,2529 ----
        target = CurrentTransactionState;
  
  
+       while(PointerIsValid(target))
+       {
                /* we don't cross savepoint level boundaries */
                if (target->savepointLevel != s->savepointLevel)
***************
*** 2534,2539 ****
                                        (errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
                                         errmsg("no such savepoint")));
-       }
  
        if (!PointerIsValid(target))
                ereport(ERROR,
--- 2531,2539 ----
                                        (errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
                                         errmsg("no such savepoint")));
  
+               if (PointerIsValid(target->name) && strcmp(target->name, name) == 0)
+                       break;
+               target = target->parent;
+       }
        if (!PointerIsValid(target))
                ereport(ERROR,
---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

               http://archives.postgresql.org

Reply via email to