@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $ PostgreSQL : pgsql / src / backend / storage / buffer / localbuf . c , v 1.90 2010 / 08 / 13 20 : 10 : 52 rhaas Exp $
* $ PostgreSQL : pgsql / src / backend / storage / buffer / localbuf . c , v 1.91 2010 / 08 / 19 16 : 16 : 20 tgl Exp $
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
@ -399,6 +399,7 @@ GetLocalBufferStorage(void)
static int next_buf_in_block = 0 ;
static int num_bufs_in_block = 0 ;
static int total_bufs_allocated = 0 ;
static MemoryContext LocalBufferContext = NULL ;
char * this_buf ;
@ -409,6 +410,19 @@ GetLocalBufferStorage(void)
/* Need to make a new request to memmgr */
int num_bufs ;
/*
* We allocate local buffers in a context of their own , so that the
* space eaten for them is easily recognizable in MemoryContextStats
* output . Create the context on first use .
*/
if ( LocalBufferContext = = NULL )
LocalBufferContext =
AllocSetContextCreate ( TopMemoryContext ,
" LocalBufferContext " ,
ALLOCSET_DEFAULT_MINSIZE ,
ALLOCSET_DEFAULT_INITSIZE ,
ALLOCSET_DEFAULT_MAXSIZE ) ;
/* Start with a 16-buffer request; subsequent ones double each time */
num_bufs = Max ( num_bufs_in_block * 2 , 16 ) ;
/* But not more than what we need for all remaining local bufs */
@ -416,8 +430,7 @@ GetLocalBufferStorage(void)
/* And don't overflow MaxAllocSize, either */
num_bufs = Min ( num_bufs , MaxAllocSize / BLCKSZ ) ;
/* Allocate space from TopMemoryContext so it never goes away */
cur_block = ( char * ) MemoryContextAlloc ( TopMemoryContext ,
cur_block = ( char * ) MemoryContextAlloc ( LocalBufferContext ,
num_bufs * BLCKSZ ) ;
next_buf_in_block = 0 ;
num_bufs_in_block = num_bufs ;