]> granicus.if.org Git - postgresql/commit
Add missing buffer lock acquisition in GetTupleForTrigger().
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 30 Nov 2012 18:56:19 +0000 (13:56 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 30 Nov 2012 18:56:19 +0000 (13:56 -0500)
commit91120734dbfecb1c6d1505927f6c95a14c41968c
tree07db3a4e2b43553b72237c0348a1e5e50fc90a80
parent25b2499d56ab62ae80dc39dd09e80542d7967a2e
Add missing buffer lock acquisition in GetTupleForTrigger().

If we had not been holding buffer pin continuously since the tuple was
initially fetched by the UPDATE or DELETE query, it would be possible for
VACUUM or a page-prune operation to move the tuple while we're trying to
copy it.  This would result in a garbage "old" tuple value being passed to
an AFTER ROW UPDATE or AFTER ROW DELETE trigger.  The preconditions for
this are somewhat improbable, and the timing constraints are very tight;
so it's not so surprising that this hasn't been reported from the field,
even though the bug has been there a long time.

Problem found by Andres Freund.  Back-patch to all active branches.
src/backend/commands/trigger.c