]> granicus.if.org Git - postgresql/commit
Several changes to reduce the probability of running out of memory during
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 23 Nov 2006 01:14:59 +0000 (01:14 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 23 Nov 2006 01:14:59 +0000 (01:14 +0000)
commit395249ecbeaaf2f2cea11b0ce128fd98c702dbde
treed33fd1c7ead48187022c32796d06fcbecc48c04c
parent2a55984162985c012ea9e26d20e88f2568d995d2
Several changes to reduce the probability of running out of memory during
AbortTransaction, which would lead to recursion and eventual PANIC exit
as illustrated in recent report from Jeff Davis.  First, in xact.c create
a special dedicated memory context for AbortTransaction to run in.  This
solves the problem as long as AbortTransaction doesn't need more than 32K
(or whatever other size we create the context with).  But in corner cases
it might.  Second, in trigger.c arrange to keep pending after-trigger event
records in separate contexts that can be freed near the beginning of
AbortTransaction, rather than having them persist until CleanupTransaction
as before.  Third, in portalmem.c arrange to free executor state data
earlier as well.  These two changes should result in backing off the
out-of-memory condition before AbortTransaction needs any significant
amount of memory, at least in typical cases such as memory overrun due
to too many trigger events or too big an executor hash table.  And all
the same for subtransaction abort too, of course.
src/backend/access/transam/xact.c
src/backend/commands/trigger.c
src/backend/utils/mmgr/portalmem.c