diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index 971a149d590f72a3c0cc7cd0aa95ac1c86e73640..892f1636a90e854bb3bebec91b19d0167938307b 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -314,8 +314,8 @@ smgrDoPendingDeletes(bool isCommit) PendingRelDelete *next; int nrels = 0, i = 0, - maxrels = 8; - SMgrRelation *srels = palloc(maxrels * sizeof(SMgrRelation)); + maxrels = 0; + SMgrRelation *srels = NULL; prev = NULL; for (pending = pendingDeletes; pending != NULL; pending = next) @@ -340,8 +340,13 @@ smgrDoPendingDeletes(bool isCommit) srel = smgropen(pending->relnode, pending->backend); - /* extend the array if needed (double the size) */ - if (maxrels <= nrels) + /* allocate the initial array, or extend it, if needed */ + if (maxrels == 0) + { + maxrels = 8; + srels = palloc(sizeof(SMgrRelation) * maxrels ); + } + else if (maxrels <= nrels) { maxrels *= 2; srels = repalloc(srels, sizeof(SMgrRelation) * maxrels); @@ -361,10 +366,9 @@ smgrDoPendingDeletes(bool isCommit) for (i = 0; i < nrels; i++) smgrclose(srels[i]); - } - - pfree(srels); + pfree(srels); + } } /*