diff options
Diffstat (limited to 'src/backend/storage/buffer')
-rw-r--r-- | src/backend/storage/buffer/buf_init.c | 21 | ||||
-rw-r--r-- | src/backend/storage/buffer/buf_table.c | 4 | ||||
-rw-r--r-- | src/backend/storage/buffer/freelist.c | 10 | ||||
-rw-r--r-- | src/backend/storage/buffer/localbuf.c | 18 |
4 files changed, 27 insertions, 26 deletions
diff --git a/src/backend/storage/buffer/buf_init.c b/src/backend/storage/buffer/buf_init.c index 5051e762d85..d74d356f0e6 100644 --- a/src/backend/storage/buffer/buf_init.c +++ b/src/backend/storage/buffer/buf_init.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.75 2005/08/12 05:05:50 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.76 2005/08/20 23:26:17 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -89,7 +89,7 @@ InitBufferPool(void) BufferBlocks = (char *) ShmemInitStruct("Buffer Blocks", - NBuffers * BLCKSZ, &foundBufs); + NBuffers * (Size) BLCKSZ, &foundBufs); if (foundDescs || foundBufs) { @@ -155,8 +155,11 @@ InitBufferPoolAccess(void) /* * Allocate and zero local arrays of per-buffer info. */ - PrivateRefCount = (int32 *) calloc(NBuffers, - sizeof(*PrivateRefCount)); + PrivateRefCount = (int32 *) calloc(NBuffers, sizeof(int32)); + if (!PrivateRefCount) + ereport(FATAL, + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("out of memory"))); } /* @@ -165,19 +168,19 @@ InitBufferPoolAccess(void) * compute the size of shared memory for the buffer pool including * data pages, buffer descriptors, hash tables, etc. */ -int +Size BufferShmemSize(void) { - int size = 0; + Size size = 0; /* size of buffer descriptors */ - size += MAXALIGN(NBuffers * sizeof(BufferDesc)); + size = add_size(size, mul_size(NBuffers, sizeof(BufferDesc))); /* size of data pages */ - size += NBuffers * MAXALIGN(BLCKSZ); + size = add_size(size, mul_size(NBuffers, BLCKSZ)); /* size of stuff controlled by freelist.c */ - size += StrategyShmemSize(); + size = add_size(size, StrategyShmemSize()); return size; } diff --git a/src/backend/storage/buffer/buf_table.c b/src/backend/storage/buffer/buf_table.c index 5ef277edc95..99dbbacd298 100644 --- a/src/backend/storage/buffer/buf_table.c +++ b/src/backend/storage/buffer/buf_table.c @@ -13,7 +13,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/buffer/buf_table.c,v 1.41 2005/05/29 04:23:04 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/buffer/buf_table.c,v 1.42 2005/08/20 23:26:17 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -37,7 +37,7 @@ static HTAB *SharedBufHash; * Estimate space needed for mapping hashtable * size is the desired hash table size (possibly more than NBuffers) */ -int +Size BufTableShmemSize(int size) { return hash_estimate_size(size, sizeof(BufferLookupEnt)); diff --git a/src/backend/storage/buffer/freelist.c b/src/backend/storage/buffer/freelist.c index 247a9abf591..906165638b6 100644 --- a/src/backend/storage/buffer/freelist.c +++ b/src/backend/storage/buffer/freelist.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/buffer/freelist.c,v 1.51 2005/03/04 20:21:06 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/buffer/freelist.c,v 1.52 2005/08/20 23:26:17 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -208,16 +208,16 @@ StrategyHintVacuum(bool vacuum_active) * Note: for somewhat historical reasons, the buffer lookup hashtable size * is also determined here. */ -int +Size StrategyShmemSize(void) { - int size = 0; + Size size = 0; /* size of lookup hash table */ - size += BufTableShmemSize(NBuffers); + size = add_size(size, BufTableShmemSize(NBuffers)); /* size of the shared replacement strategy control block */ - size += MAXALIGN(sizeof(BufferStrategyControl)); + size = add_size(size, MAXALIGN(sizeof(BufferStrategyControl))); return size; } diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c index 6ac0b543ae3..6dce5086562 100644 --- a/src/backend/storage/buffer/localbuf.c +++ b/src/backend/storage/buffer/localbuf.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.68 2005/08/08 19:44:22 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.69 2005/08/20 23:26:17 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -255,15 +255,13 @@ InitLocalBuffers(void) int i; /* Allocate and zero buffer headers and auxiliary arrays */ - LocalBufferDescriptors = (BufferDesc *) - MemoryContextAllocZero(TopMemoryContext, - nbufs * sizeof(BufferDesc)); - LocalBufferBlockPointers = (Block *) - MemoryContextAllocZero(TopMemoryContext, - nbufs * sizeof(Block)); - LocalRefCount = (int32 *) - MemoryContextAllocZero(TopMemoryContext, - nbufs * sizeof(int32)); + LocalBufferDescriptors = (BufferDesc *) calloc(nbufs, sizeof(BufferDesc)); + LocalBufferBlockPointers = (Block *) calloc(nbufs, sizeof(Block)); + LocalRefCount = (int32 *) calloc(nbufs, sizeof(int32)); + if (!LocalBufferDescriptors || !LocalBufferBlockPointers || !LocalRefCount) + ereport(FATAL, + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("out of memory"))); nextFreeLocalBuf = 0; |