pg_buffercache: Allow huge allocations.
authorRobert Haas
Thu, 15 Sep 2016 13:22:52 +0000 (09:22 -0400)
committerRobert Haas
Thu, 15 Sep 2016 13:22:52 +0000 (09:22 -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 f39fe255db63e39a242ac94a921ff02b82b2fec5..5323269aa599fc5151c50c0cec29253b43f1630b 100644 (file)
@@ -98,7 +98,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;