Fix possible corruption of AfterTriggerEventLists in subtransaction rollback.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 19 Aug 2010 15:46:18 +0000 (15:46 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 19 Aug 2010 15:46:18 +0000 (15:46 +0000)
commite275d16a54de5595ed70cafd99c801af2fbdbc8b
tree2ecf7d439b97d1b42297b23f404e91aed90f3507
parent3f1197191685512d1968ffd8958497159944c2a1
Fix possible corruption of AfterTriggerEventLists in subtransaction rollback.

afterTriggerInvokeEvents failed to adjust events->tailfree when truncating
the last chunk of an event list.  This could result in the data being
"de-truncated" by afterTriggerRestoreEventList during a subsequent
subtransaction abort.  Even that wouldn't kill us, because the re-added data
would just be events marked DONE --- unless the data had been partially
overwritten by new events.  Then we might crash, or in any case misbehave
(perhaps fire triggers twice, or fire triggers with the wrong event data).
Per bug #5622 from Thue Janus Kristensen.

Back-patch to 8.4 where the current trigger list representation was introduced.
src/backend/commands/trigger.c