Alvaro Herrera <[EMAIL PROTECTED]> writes:
> Tom Lane wrote:
>> Shouldn't UnregisterSnapshot insist that s_level be equal to current
>> xact nest level?

> It can't check that; consider

> begin;
> savepoint foo;
> declare cur cursor for select (1), (2), (3);
> savepoint bar;
> close cur;
> commit;

Hmm ... but that "close" can't unregister the snapshot immediately,
because you'd lose if the 2nd savepoint gets rolled back, no?  Is the
handling of this case even correct at the moment?

ISTM correct handling of this example would require that the "close"
not really discard the snap until commit.  Then, given proper ordering
of the cleanup operations at commit, you might be able to still have the
cross-check about s_level in UnregisterSnapshot.  (IOW, maybe having
snapshot cleanup be late in the commit sequence wasn't such a good

                        regards, tom lane

Sent via pgsql-patches mailing list (
To make changes to your subscription:

Reply via email to