aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/execUtils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/executor/execUtils.c')
-rw-r--r--src/backend/executor/execUtils.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index 55ab18fb826..772c86e70e9 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -322,19 +322,18 @@ CreateExprContext(EState *estate)
ExprContext *
CreateWorkExprContext(EState *estate)
{
- Size minContextSize = ALLOCSET_DEFAULT_MINSIZE;
- Size initBlockSize = ALLOCSET_DEFAULT_INITSIZE;
Size maxBlockSize = ALLOCSET_DEFAULT_MAXSIZE;
- /* choose the maxBlockSize to be no larger than 1/16 of work_mem */
- while (maxBlockSize > work_mem * (Size) 1024 / 16)
- maxBlockSize >>= 1;
+ maxBlockSize = pg_prevpower2_size_t(work_mem * (Size) 1024 / 16);
- if (maxBlockSize < ALLOCSET_DEFAULT_INITSIZE)
- maxBlockSize = ALLOCSET_DEFAULT_INITSIZE;
+ /* But no bigger than ALLOCSET_DEFAULT_MAXSIZE */
+ maxBlockSize = Min(maxBlockSize, ALLOCSET_DEFAULT_MAXSIZE);
- return CreateExprContextInternal(estate, minContextSize,
- initBlockSize, maxBlockSize);
+ /* and no smaller than ALLOCSET_DEFAULT_INITSIZE */
+ maxBlockSize = Max(maxBlockSize, ALLOCSET_DEFAULT_INITSIZE);
+
+ return CreateExprContextInternal(estate, ALLOCSET_DEFAULT_MINSIZE,
+ ALLOCSET_DEFAULT_INITSIZE, maxBlockSize);
}
/* ----------------