aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-02-06 01:53:53 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-02-06 01:53:53 +0000
commit85c17dbff8ade0c5237e3ac1ece7cacacfdde399 (patch)
tree63209683720c582769cdb87e247d9dfa4f39320e
parent192ce19d361b1a6ee5a6d7198ddb38780ec0cab8 (diff)
downloadpostgresql-85c17dbff8ade0c5237e3ac1ece7cacacfdde399.tar.gz
postgresql-85c17dbff8ade0c5237e3ac1ece7cacacfdde399.zip
Out-of-bounds memory allocation request sizes should be treated as just
elog(ERROR) not an Assert trap, since we've downgraded out-of-memory to elog(ERROR) not a fatal error. Also, change the hard boundary from 256Mb to 1Gb, just so that anyone who's actually got that much memory to spare can play with TOAST objects approaching a gigabyte.
-rw-r--r--src/backend/utils/error/excid.c14
-rw-r--r--src/backend/utils/mmgr/mcxt.c12
-rw-r--r--src/include/utils/excid.h4
-rw-r--r--src/include/utils/memutils.h9
4 files changed, 14 insertions, 25 deletions
diff --git a/src/backend/utils/error/excid.c b/src/backend/utils/error/excid.c
index bef1c00856b..877610176a3 100644
--- a/src/backend/utils/error/excid.c
+++ b/src/backend/utils/error/excid.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/excid.c,v 1.9 2001/01/24 19:43:15 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/excid.c,v 1.10 2001/02/06 01:53:53 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -43,18 +43,6 @@ Exception BadArg = {"Bad Argument to Function Call"};
*****************************************************************************/
/*
- * BadAllocSize
- * Indicates that an allocation request is of unreasonable size.
- */
-Exception BadAllocSize = {"Too Large Allocation Request"};
-
-/*
- * ExhaustedMemory
- * Indicates an dynamic memory allocation failed.
- */
-Exception ExhaustedMemory = {"Memory Allocation Failed"};
-
-/*
* Unimplemented
* Indicates a function call request requires unimplemented code.
*/
diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c
index 0520cb6d0a6..ab8434a0581 100644
--- a/src/backend/utils/mmgr/mcxt.c
+++ b/src/backend/utils/mmgr/mcxt.c
@@ -14,7 +14,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.26 2001/01/24 19:43:16 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.27 2001/02/06 01:53:53 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -417,8 +417,9 @@ MemoryContextAlloc(MemoryContext context, Size size)
{
AssertArg(MemoryContextIsValid(context));
- LogTrap(!AllocSizeIsValid(size), BadAllocSize,
- ("size=%d [0x%x]", size, size));
+ if (!AllocSizeIsValid(size))
+ elog(ERROR, "MemoryContextAlloc: invalid request size %lu",
+ (unsigned long) size);
return (*context->methods->alloc) (context, size);
}
@@ -474,8 +475,9 @@ repalloc(void *pointer, Size size)
AssertArg(MemoryContextIsValid(header->context));
- LogTrap(!AllocSizeIsValid(size), BadAllocSize,
- ("size=%d [0x%x]", size, size));
+ if (!AllocSizeIsValid(size))
+ elog(ERROR, "repalloc: invalid request size %lu",
+ (unsigned long) size);
return (*header->context->methods->realloc) (header->context,
pointer, size);
diff --git a/src/include/utils/excid.h b/src/include/utils/excid.h
index 88ba06dc2a8..d1bbcbb21bd 100644
--- a/src/include/utils/excid.h
+++ b/src/include/utils/excid.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: excid.h,v 1.8 2001/01/24 19:43:28 momjian Exp $
+ * $Id: excid.h,v 1.9 2001/02/06 01:53:52 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -18,8 +18,6 @@
extern Exception FailedAssertion;
extern Exception BadState;
extern Exception BadArg;
-extern Exception BadAllocSize;
-extern Exception ExhaustedMemory;
extern Exception Unimplemented;
extern Exception CatalogFailure;/* XXX inconsistent naming style */
diff --git a/src/include/utils/memutils.h b/src/include/utils/memutils.h
index 28cf6b33549..7ba0719dcb5 100644
--- a/src/include/utils/memutils.h
+++ b/src/include/utils/memutils.h
@@ -10,7 +10,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: memutils.h,v 1.41 2001/01/24 19:43:28 momjian Exp $
+ * $Id: memutils.h,v 1.42 2001/02/06 01:53:52 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -22,16 +22,17 @@
/*
* MaxAllocSize
- * Arbitrary limit on size of allocations.
+ * Quasi-arbitrary limit on size of allocations.
*
* Note:
* There is no guarantee that allocations smaller than MaxAllocSize
* will succeed. Allocation requests larger than MaxAllocSize will
* be summarily denied.
*
- * XXX This should be defined in a file of tunable constants.
+ * XXX This is deliberately chosen to correspond to the limiting size
+ * of varlena objects under TOAST. See VARATT_MASK_SIZE in postgres.h.
*/
-#define MaxAllocSize ((Size) 0xfffffff) /* 16G - 1 */
+#define MaxAllocSize ((Size) 0x3fffffff) /* 1 gigabyte - 1 */
#define AllocSizeIsValid(size) (0 < (size) && (size) <= MaxAllocSize)