]> granicus.if.org Git - postgresql/commit
Avoid palloc in critical section in GiST WAL-logging.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 3 Apr 2014 12:09:37 +0000 (15:09 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 3 Apr 2014 12:44:09 +0000 (15:44 +0300)
commit003a31a7c9fabed9b247ccd4c4123da017fddf58
tree372a62ef7c17a948d2c477d845b60e43b4bcc2b4
parent029decfec6befe3bba14918590af5c998402ff08
Avoid palloc in critical section in GiST WAL-logging.

Memory allocation can fail if you run out of memory, and inside a critical
section that will lead to a PANIC. Use conservatively-sized arrays in stack
instead.

There was previously no explicit limit on the number of pages a GiST split
can produce, it was only limited by the number of LWLocks that can be held
simultaneously (100 at the moment). This patch adds an explicit limit of 75
pages. That should be plenty, a typical split shouldn't produce more than
2-3 page halves.

The bug has been there forever, but only backpatch down to 9.1. The code
was changed significantly in 9.1, and it doesn't seem worth the risk or
trouble to adapt this for 9.0 and 8.4.
src/backend/access/gist/README
src/backend/access/gist/gist.c
src/backend/access/gist/gistxlog.c
src/include/access/gist_private.h