Ensure that a cursor has an immutable snapshot throughout its lifespan.
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 2 Oct 2009 17:57:30 +0000 (17:57 +0000)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 2 Oct 2009 17:57:30 +0000 (17:57 +0000)
commitcaa4cfa3697472a6673eb817eb34681684cba14f
tree8da52acab9865afa01f6771a33f3eb9a5952b6fa
parentfabf75cffc34b187aba57b0d3a086ebec586d016
Ensure that a cursor has an immutable snapshot throughout its lifespan.

The old coding was using a regular snapshot, referenced elsewhere, that was
subject to having its command counter updated.  Fix by creating a private copy
of the snapshot exclusively for the cursor.

Backpatch to 8.4, which is when the bug was introduced during the snapshot
management rewrite.
src/backend/commands/portalcmds.c
src/backend/executor/spi.c
src/backend/utils/time/snapmgr.c
src/include/utils/snapmgr.h
src/test/regress/expected/portals.out
src/test/regress/sql/portals.sql