OSDN Git Service

Cleanup for pull-up-isReset patch.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 24 May 2011 21:56:52 +0000 (17:56 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 24 May 2011 21:57:32 +0000 (17:57 -0400)
Clear isReset before, not after, calling the context-specific alloc method,
so as to preserve the option to do a tail call in MemoryContextAlloc
(and also so this code isn't assuming that a failed alloc call won't have
changed the context's state before failing).  Fix missed direct invocation
of reset method.  Reformat a comment.

src/backend/utils/mmgr/aset.c
src/backend/utils/mmgr/mcxt.c

index 9e32128..e202aca 100644 (file)
@@ -128,11 +128,11 @@ typedef void *AllocPointer;
 /*
  * AllocSetContext is our standard implementation of MemoryContext.
  *
- * Note: header.isReset means there is nothing for AllocSetReset to do.  This is
- * different from the aset being physically empty (empty blocks list) because
- * we may still have a keeper block.  It's also different from the set being
- * logically empty, because we don't attempt to detect pfree'ing the last
- * active chunk.
+ * Note: header.isReset means there is nothing for AllocSetReset to do.
+ * This is different from the aset being physically empty (empty blocks list)
+ * because we may still have a keeper block.  It's also different from the set
+ * being logically empty, because we don't attempt to detect pfree'ing the
+ * last active chunk.
  */
 typedef struct AllocSetContext
 {
index 980cce5..7ed35d5 100644 (file)
@@ -234,7 +234,7 @@ MemoryContextResetAndDeleteChildren(MemoryContext context)
        AssertArg(MemoryContextIsValid(context));
 
        MemoryContextDeleteChildren(context);
-       (*context->methods->reset) (context);
+       MemoryContextReset(context);
 }
 
 /*
@@ -510,16 +510,15 @@ MemoryContextCreate(NodeTag tag, Size size,
 void *
 MemoryContextAlloc(MemoryContext context, Size size)
 {
-       void       *ret;
        AssertArg(MemoryContextIsValid(context));
 
        if (!AllocSizeIsValid(size))
                elog(ERROR, "invalid memory alloc request size %lu",
                         (unsigned long) size);
 
-       ret = (*context->methods->alloc) (context, size);
        context->isReset = false;
-       return ret;
+
+       return (*context->methods->alloc) (context, size);
 }
 
 /*
@@ -540,11 +539,12 @@ MemoryContextAllocZero(MemoryContext context, Size size)
                elog(ERROR, "invalid memory alloc request size %lu",
                         (unsigned long) size);
 
+       context->isReset = false;
+
        ret = (*context->methods->alloc) (context, size);
 
        MemSetAligned(ret, 0, size);
 
-       context->isReset = false;
        return ret;
 }
 
@@ -566,11 +566,12 @@ MemoryContextAllocZeroAligned(MemoryContext context, Size size)
                elog(ERROR, "invalid memory alloc request size %lu",
                         (unsigned long) size);
 
+       context->isReset = false;
+
        ret = (*context->methods->alloc) (context, size);
 
        MemSetLoop(ret, 0, size);
 
-       context->isReset = false;
        return ret;
 }