]> granicus.if.org Git - postgresql/commitdiff
pg_buffercache: Allow huge allocations.
authorRobert Haas <rhaas@postgresql.org>
Thu, 15 Sep 2016 13:22:52 +0000 (09:22 -0400)
committerRobert Haas <rhaas@postgresql.org>
Thu, 15 Sep 2016 13:30:38 +0000 (09:30 -0400)
Otherwise, users who have configured shared_buffers >= 256GB won't
be able to use this module.  There probably aren't many of those, but
it doesn't hurt anything to fix it so that it works.

Backpatch to 9.4, where MemoryContextAllocHuge was introduced.  The
same problem exists in older branches, but there's no easy way to
fix it there.

KaiGai Kohei

contrib/pg_buffercache/pg_buffercache_pages.c

index 17b4b6fa6fc2efca89f86db108ed5b38c0cdf120..da13bde3595c79ff03c99daf38c8f04a4d320d5d 100644 (file)
@@ -124,7 +124,9 @@ pg_buffercache_pages(PG_FUNCTION_ARGS)
                fctx->tupdesc = BlessTupleDesc(tupledesc);
 
                /* Allocate NBuffers worth of BufferCachePagesRec records. */
-               fctx->record = (BufferCachePagesRec *) palloc(sizeof(BufferCachePagesRec) * NBuffers);
+               fctx->record = (BufferCachePagesRec *)
+                       MemoryContextAllocHuge(CurrentMemoryContext,
+                                                                  sizeof(BufferCachePagesRec) * NBuffers);
 
                /* Set max calls and remember the user function context. */
                funcctx->max_calls = NBuffers;