]> granicus.if.org Git - postgresql/commitdiff
Revert the assertion of no palloc's in critical section.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 30 Jun 2014 07:23:18 +0000 (10:23 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 30 Jun 2014 07:25:05 +0000 (10:25 +0300)
Per discussion, it still fires too often to be safe to enable in
production. Keep it in master, so that we find the issues, but disable it
in the stable branch.

src/backend/utils/mmgr/mcxt.c

index e83e76dc0f38ed13f2932a0337641a48e007bd59..086f5bd78caf1957c2bcf0facf27294d6b5b625c 100644 (file)
@@ -24,7 +24,6 @@
 
 #include "postgres.h"
 
-#include "miscadmin.h"
 #include "utils/memdebug.h"
 #include "utils/memutils.h"
 
@@ -56,19 +55,6 @@ MemoryContext PortalContext = NULL;
 
 static void MemoryContextStatsInternal(MemoryContext context, int level);
 
-/*
- * You should not do memory allocations within a critical section, because
- * an out-of-memory error will be escalated to a PANIC. To enforce that
- * rule, the allocation functions Assert that.
- *
- * There are a two exceptions: 1) error recovery uses ErrorContext, which
- * has some memory set aside so that you don't run out. And 2) checkpointer
- * currently just hopes for the best, which is wrong and ought to be fixed,
- * but it's a known issue so let's not complain about in the meanwhile.
- */
-#define AssertNotInCriticalSection(context) \
-       Assert(CritSectionCount == 0 || (context) == ErrorContext || \
-                  AmCheckpointerProcess())
 
 /*****************************************************************************
  *       EXPORTED ROUTINES                                                                                                              *
@@ -533,8 +519,6 @@ MemoryContextCreate(NodeTag tag, Size size,
        MemoryContext node;
        Size            needed = size + strlen(name) + 1;
 
-       Assert(CritSectionCount == 0);
-
        /* Get space for node and name */
        if (TopMemoryContext != NULL)
        {
@@ -591,7 +575,6 @@ MemoryContextAlloc(MemoryContext context, Size size)
        void       *ret;
 
        AssertArg(MemoryContextIsValid(context));
-       AssertNotInCriticalSection(context);
 
        if (!AllocSizeIsValid(size))
                elog(ERROR, "invalid memory alloc request size %zu", size);
@@ -617,7 +600,6 @@ MemoryContextAllocZero(MemoryContext context, Size size)
        void       *ret;
 
        AssertArg(MemoryContextIsValid(context));
-       AssertNotInCriticalSection(context);
 
        if (!AllocSizeIsValid(size))
                elog(ERROR, "invalid memory alloc request size %zu", size);
@@ -645,7 +627,6 @@ MemoryContextAllocZeroAligned(MemoryContext context, Size size)
        void       *ret;
 
        AssertArg(MemoryContextIsValid(context));
-       AssertNotInCriticalSection(context);
 
        if (!AllocSizeIsValid(size))
                elog(ERROR, "invalid memory alloc request size %zu", size);
@@ -667,7 +648,6 @@ palloc(Size size)
        void       *ret;
 
        AssertArg(MemoryContextIsValid(CurrentMemoryContext));
-       AssertNotInCriticalSection(CurrentMemoryContext);
 
        if (!AllocSizeIsValid(size))
                elog(ERROR, "invalid memory alloc request size %zu", size);
@@ -687,7 +667,6 @@ palloc0(Size size)
        void       *ret;
 
        AssertArg(MemoryContextIsValid(CurrentMemoryContext));
-       AssertNotInCriticalSection(CurrentMemoryContext);
 
        if (!AllocSizeIsValid(size))
                elog(ERROR, "invalid memory alloc request size %zu", size);
@@ -759,7 +738,6 @@ repalloc(void *pointer, Size size)
                           ((char *) pointer - STANDARDCHUNKHEADERSIZE))->context;
 
        AssertArg(MemoryContextIsValid(context));
-       AssertNotInCriticalSection(context);
 
        /* isReset must be false already */
        Assert(!context->isReset);
@@ -782,7 +760,6 @@ MemoryContextAllocHuge(MemoryContext context, Size size)
        void       *ret;
 
        AssertArg(MemoryContextIsValid(context));
-       AssertNotInCriticalSection(context);
 
        if (!AllocHugeSizeIsValid(size))
                elog(ERROR, "invalid memory alloc request size %zu", size);
@@ -824,7 +801,6 @@ repalloc_huge(void *pointer, Size size)
                           ((char *) pointer - STANDARDCHUNKHEADERSIZE))->context;
 
        AssertArg(MemoryContextIsValid(context));
-       AssertNotInCriticalSection(context);
 
        /* isReset must be false already */
        Assert(!context->isReset);