On Thu, 2009-02-12 at 14:23 +0200, Heikki Linnakangas wrote: > Simon Riggs wrote: > > On Thu, 2009-02-12 at 09:50 +0200, Heikki Linnakangas wrote: > >> So far so good, but what about all the other callers of > >> SubTransGetParent()? For example, XactLockTableWait will fail an > >> assertion if asked to wait on a subtransaction which is then released. > > > > I agree that it could fail the assertion, though it is clear that the > > assertion should now be removed. > > No, then you just get an infinite loop instead, trying to get the parent > of 0 over and over again.
There is no infinite loop. Try it, or read TransactionIdIsInProgress(). > > The logic is: if there is no lock table entry for that xid *and* it is > > not in progress *and* it is not in pg_subtrans, then it must have been > > an aborted subtransaction of a currently active xact or it has otherwise > > completed. > > Right, we got it right that far. But after the subtransaction has > completed, the question is: what's its parent? That's what the patch got > wrong. We can find that out from procarray, since a subcommitted xid will still be present in the subxid cache of its parent (by definition, otherwise it will be marked in pg_subtrans). It will be quicker to fix that than to make other changes. -- Simon Riggs www.2ndQuadrant.com PostgreSQL Training, Services and Support -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers