diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2018-08-23 15:13:48 +0200 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2018-08-27 22:15:39 +0200 |
commit | 2657d4ea66c775c3334181722115be2d6128c5cd (patch) | |
tree | d42cae822e260a54c487527db13c8cc131840889 /src/backend/utils/adt/regexp.c | |
parent | c5e235ff8ad0f4907a736a6440dc4be6f939e65c (diff) | |
download | postgresql-2657d4ea66c775c3334181722115be2d6128c5cd.tar.gz postgresql-2657d4ea66c775c3334181722115be2d6128c5cd.zip |
Fix snapshot leak warning for some procedures
The problem arises with the combination of CALL with output parameters
and doing a COMMIT inside the procedure. When a CALL has output
parameters, the portal uses the strategy PORTAL_UTIL_SELECT instead of
PORTAL_MULTI_QUERY. Using PORTAL_UTIL_SELECT causes the portal's
snapshot to be registered with the current resource
owner (portal->holdSnapshot); see
9ee1cf04ab6bcefe03a11837b53f29ca9dc24c7a for the reason.
Normally, PortalDrop() unregisters the snapshot. If not, then
ResourceOwnerRelease() will print a warning about a snapshot leak on
transaction commit. A transaction commit normally drops all
portals (PreCommit_Portals()), except the active portal. So in case of
the active portal, we need to manually release the snapshot to avoid the
warning.
Reported-by: Prabhat Sahu <prabhat.sahu@enterprisedb.com>
Reviewed-by: Jonathan S. Katz <jkatz@postgresql.org>
Diffstat (limited to 'src/backend/utils/adt/regexp.c')
0 files changed, 0 insertions, 0 deletions