Commit 6130208e authored by Alvaro Herrera's avatar Alvaro Herrera

Avoid useless palloc during transaction commit

We can allocate the initial relations-to-drop array when first needed,
instead of at function entry; this avoids allocating it when the
function is not going to do anything, which is most of the time.

Backpatch to 9.3, where this behavior was introduced by commit
279628a0.

There's more that could be done here, such as possible reworking of the
code to avoid having to palloc anything, but that doesn't sound as
backpatchable as this relatively minor change.

Per complaint from Noah Misch in
20131031145234.GA621493@tornado.leadboat.com
parent c32afe53
...@@ -314,8 +314,8 @@ smgrDoPendingDeletes(bool isCommit) ...@@ -314,8 +314,8 @@ smgrDoPendingDeletes(bool isCommit)
PendingRelDelete *next; PendingRelDelete *next;
int nrels = 0, int nrels = 0,
i = 0, i = 0,
maxrels = 8; maxrels = 0;
SMgrRelation *srels = palloc(maxrels * sizeof(SMgrRelation)); SMgrRelation *srels = NULL;
prev = NULL; prev = NULL;
for (pending = pendingDeletes; pending != NULL; pending = next) for (pending = pendingDeletes; pending != NULL; pending = next)
...@@ -340,8 +340,13 @@ smgrDoPendingDeletes(bool isCommit) ...@@ -340,8 +340,13 @@ smgrDoPendingDeletes(bool isCommit)
srel = smgropen(pending->relnode, pending->backend); srel = smgropen(pending->relnode, pending->backend);
/* extend the array if needed (double the size) */ /* allocate the initial array, or extend it, if needed */
if (maxrels <= nrels) if (maxrels == 0)
{
maxrels = 8;
srels = palloc(sizeof(SMgrRelation) * maxrels );
}
else if (maxrels <= nrels)
{ {
maxrels *= 2; maxrels *= 2;
srels = repalloc(srels, sizeof(SMgrRelation) * maxrels); srels = repalloc(srels, sizeof(SMgrRelation) * maxrels);
...@@ -361,10 +366,9 @@ smgrDoPendingDeletes(bool isCommit) ...@@ -361,10 +366,9 @@ smgrDoPendingDeletes(bool isCommit)
for (i = 0; i < nrels; i++) for (i = 0; i < nrels; i++)
smgrclose(srels[i]); smgrclose(srels[i]);
}
pfree(srels);
pfree(srels);
}
} }
/* /*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment