Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3QIW-001Cf5-29 for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Mar 2026 03:13:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w3QIV-0044xB-0a for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Mar 2026 03:13:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3QIU-0044x3-2X for pgsql-hackers@lists.postgresql.org; Fri, 20 Mar 2026 03:13:15 +0000 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w3QIS-000000006zR-0ss2 for pgsql-hackers@lists.postgresql.org; Fri, 20 Mar 2026 03:13:14 +0000 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-829865a8471so191954b3a.3 for ; Thu, 19 Mar 2026 20:13:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773976390; x=1774581190; darn=lists.postgresql.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=p5v3oSK/RRvAUqukGC/MvbKNp0Qo/lmyTcEupNRORB4=; b=CHvOiQHHBF77SnDV118QYyMs2WPNf7Oqn5GAdQc+aEgoM/5ptJjD2JE+EpgwWwsWE4 xw+04dWv0gHF2nNphXvGEkBzUwSmfz7MxVzsbEk6ro4KKcjjwMldNHXdwlm40hZW9ukB cPK12sQS+YObFgz2yXFpv0MBZtAeUSKY6jXFtzmGFz2kYS3Rc8VWgFqYGIAGgVRoVs+5 HKxvaAY7QwaoujikEsZjHhnFvpaMzIHiFjWtBfnkwxbNhZDU2M2DSs7FhD42NbRLW7Vj 8MAYrQb9IP5UrK7KVgxbQ2+vzOwU/CR4qeDSzWaKolBtflQRVU9JFpkfaDCaikNOvAqR aM6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773976390; x=1774581190; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=p5v3oSK/RRvAUqukGC/MvbKNp0Qo/lmyTcEupNRORB4=; b=VNxs0SAgjZPUW4Wn2Mi+w9T7wFiJSTFcU2jDfmq5EZDVQ9ISbbNevnfX906HT1y60v QoV4hw0LObb3kJtfFP5Y/erKvFQvVayvjTT35clPQPL/jlV0TNjqL1lh8C79QdPLWbRM hE1fVvMdNZQy0r9W1dxGV7ABxE+NhvEZU6sZSksJdQRLEDuMfifeZhrYqehNTHeU+xbq ZK1t0wdAY4EhxkTggrtQtshyK5+r/PqfdsMtrrV9n9YdWTMSkV2Ixf8bfJjaOoVW0ucb iIKTzFEGmoZwQiFTQ1sH7WuTt8jzN5WgsOsmI9KxjvBwO1Z5GLubWj5RBp1r+ei42NXY ymcA== X-Gm-Message-State: AOJu0YwWxZZPxZg/vdkfXtgU/xCTsSPGf3lFzMDuotNec9mNltSnVVXd AWiRW6l9UwqhxMUj83S8m4ZVF2nxzFQIR9NGSYBYdLkjTOnKadplNxxZ X-Gm-Gg: ATEYQzy/KwESjObn59VFgK/wtNrXJV0oP1u8nxt6B1A1sN/PibpAj6chxZeFDOqgFae s9smK9KZnYBRkRtuZgD/u1oLMu1+DzTDFuZV5tsMNrnZM2mw5oiNLIAR+0BeNPU9Wpp9+m4zODZ OZDPZF279TSk29c9UvyULkDu00p/kxW/n/d1eZI6GKfq9WuP5dxA+Xpboz8Pb1eNHSp+1BxeOF3 QArapWoreAxvs22B0vONdF4r+GtyGq+pGYbAuuvfJOKlw5Y1CnOBVgErx2stb8jQ2zgKEedOgVe fT42LRtKESjhkyeoUNOJ7mPi6XvKlOX6o1lBZZDTDxlGVzFi9N7FNajJmAtKvE/F2wUAGRJz7VA AGGh5ZfY7ayAHcwLHIGQkJQMwck4LfNdpSh94sE7UKi/0BwUVuVe883bHZkW1cRpy7TRLyfqQqd 70TPQJ18q1VweP/7pZeyVStxs4QkEdZKKBh31uDkRn X-Received: by 2002:a05:6a00:1789:b0:82a:720a:4cde with SMTP id d2e1a72fcca58-82a8c23855bmr1190501b3a.2.1773976390034; Thu, 19 Mar 2026 20:13:10 -0700 (PDT) Received: from smtpclient.apple ([203.10.98.27]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b03bc1ddasm588052b3a.19.2026.03.19.20.13.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 19 Mar 2026 20:13:09 -0700 (PDT) From: Chao Li Message-Id: Content-Type: multipart/mixed; boundary="Apple-Mail=_CB18A258-38A0-464C-8292-69D09459849E" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3864.400.21\)) Subject: Re: Trivial Fix: use palloc_array/repalloc_array for BufFile file arrays Date: Fri, 20 Mar 2026 11:12:33 +0800 In-Reply-To: Cc: Postgres hackers To: Masahiko Sawada References: <1D199FA4-C146-493B-B29A-A1BF1084DBBC@gmail.com> <5218079D-02C5-484C-922D-BCF908A55F91@gmail.com> X-Mailer: Apple Mail (2.3864.400.21) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Apple-Mail=_CB18A258-38A0-464C-8292-69D09459849E Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Mar 9, 2026, at 08:40, Chao Li wrote: >=20 >=20 >=20 >> On Mar 7, 2026, at 03:33, Masahiko Sawada = wrote: >>=20 >> Hi, >>=20 >> On Tue, Mar 3, 2026 at 5:31=E2=80=AFPM Chao Li = wrote: >>>=20 >>>=20 >>>=20 >>>> On Dec 25, 2025, at 11:34, Chao Li wrote: >>>>=20 >>>>=20 >>>>=20 >>>>> On Dec 25, 2025, at 11:12, Chao Li wrote: >>>>>=20 >>>>> Hi Hackers, >>>>>=20 >>>>> I noticed this error while working on [1]. >>>>>=20 >>>>> In BufFile, the fields is claimed as an array: >>>>> ``` >>>>> struct BufFile >>>>> { >>>>> File *files; /* palloc'd array with numFiles entries */ >>>>> ``` >>>>>=20 >>>>> However, it=E2=80=99s allocated by palloc_object(): >>>>> ``` >>>>> file->files =3D palloc_object(File); >>>>> ``` >>>>>=20 >>>>> And reallocated by repalloc(): >>>>> ``` >>>>> file->files =3D (File *) repalloc(file->files, >>>>> (file->numFiles + 1) * sizeof(File)); >>>>> ``` >>>>>=20 >>>>> This trivial patch just changes to use = palloc_array/repalloc_array, which makes the intent clearer. >>>>>=20 >>>>> Best regards, >>>>> -- >>>>> Chao Li (Evan) >>>>> HighGo Software Co., Ltd. >>>>> https://www.highgo.com/ >>>>>=20 >>>>>=20 >>>>>=20 >>>>>=20 >>>>> >>>>=20 >>>>=20 >>>> Sorry for missing the reference of [1]: >>>>=20 >>>> [1] https://postgr.es/m/aUStrqoOCDRFAq1M@paquier.xyz >>>>=20 >>>> Best regards, >>>> -- >>>> Chao Li (Evan) >>>> HighGo Software Co., Ltd. >>>> https://www.highgo.com/ >>>>=20 >>>=20 >>> PFA v2: >>> * Rebased >>> * Updated the commit message >>=20 >> I've reviewed the v2 patch and here is a comment: >>=20 >> - file->files =3D palloc_object(File); >> + file->files =3D palloc_array(File, 1); >>=20 >> I'm not a fan of this change. This change looks like trying to >> distinguish allocated memory by palloc_object() and palloc_array() >> even though underlying memory is identical. I'm concerned about this >> change creating unnecessary coding conventions. >>=20 >=20 > Hi Masahiho-san, >=20 > Thank you so much for taking the time to review this patch. >=20 > Actually, this change was my original motivation for creating the = patch. When I first read the code, I was confused why the field was = named with the plural =E2=80=9Cfiles" even though it was allocated with = palloc_object(). After reading further, I saw that the memory is later = enlarged with repalloc, so it became clear that file->files is really = meant to be an array. >=20 > To me, the allocation method should reflect the actual meaning of the = object. Here, file->files is an array, no matter how many elements it = currently contains. Even if it only has one element at the moment, = semantically it is still an array. >=20 > By =E2=80=9Ccreating unnecessary coding conventions=E2=80=9D, are you = concerned that this change might encourage people to always use = palloc_array(type, 1) when allocating a single object? That concern is = understandable, but I think it should depend on the real semantics. If = the memory is for a single object, then of course palloc_array() should = be wrong. >=20 > Given the nature of C, a "File *" can point either to a single File = object or to a File array. In that sense, palloc_array() makes it = explicit that this pointer is intended to represent an array, while = palloc_object() suggests a single object. So I think changing this to = palloc_array() improves readability in this case. >=20 > Best regards, > -- > Chao Li (Evan) > HighGo Software Co., Ltd. > https://www.highgo.com/ Hi Masahiko-san, Would you mind sharing any further thoughts on this? While working further on this patch, I noticed this code in ginget.c: ``` key->requiredEntries =3D palloc(1 * sizeof(GinScanEntry)); ``` To me, this seems to use * 1 to make it explicit that = key->requiredEntries is intended as an array, even though it currently = contains only one element. That feels similar to what I was trying to = express with: " file->files =3D palloc_array(File, 1);=E2=80=9D. But if = you still feel this is not a good change, I=E2=80=99m happy to revert = it. Also, while reviewing recent patches, I found a number of additional = palloc/repalloc call sites that could be converted to the newer helpers, = so I expanded the scope of this patch a bit. To avoid making it too = large, I included only about 1/3 of the cases I found in this version. = If this patch moves forward, I=E2=80=99d be happy to clean up the = remaining occurrences separately. PFA v3. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/ --Apple-Mail=_CB18A258-38A0-464C-8292-69D09459849E Content-Disposition: attachment; filename=v3-0001-Use-array-allocation-helpers-in-more-places.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v3-0001-Use-array-allocation-helpers-in-more-places.patch" Content-Transfer-Encoding: quoted-printable =46rom=20388174a5f8039e5666d6e14c3e2467e622926d46=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Thu,=2025=20Dec=202025=2011:00:26=20+0800=0ASubject:=20[PATCH=20= v3]=20Use=20array=20allocation=20helpers=20in=20more=20places=0A=0A= Author:=20Chao=20Li=20=0AReviewed-by:=20Masahiko=20= Sawada=20=0ADiscussion:=20= https://postgr.es/m/CAEoWx2m1Vo97Jg9=3DK7JAZ0xdkg5D=3DGkgOxZR1=3DEW7mUfy00= 8fw@mail.gmail.com=0A---=0A=20src/backend/access/common/tupdesc.c=20=20=20= =20=20=20=20=20=20=20=20|=20=206=20++--=0A=20= src/backend/access/gin/gindatapage.c=20=20=20=20=20=20=20=20=20=20|=20=20= 2=20+-=0A=20src/backend/access/gin/ginget.c=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20|=20=208=20++---=0A=20= src/backend/access/gin/ginpostinglist.c=20=20=20=20=20=20=20|=20=206=20= ++--=0A=20src/backend/access/gin/ginscan.c=20=20=20=20=20=20=20=20=20=20=20= =20=20=20|=20=208=20++---=0A=20src/backend/access/gist/gistget.c=20=20=20= =20=20=20=20=20=20=20=20=20=20|=20=204=20+--=0A=20= src/backend/access/gist/gistproc.c=20=20=20=20=20=20=20=20=20=20=20=20|=20= 10=20+++----=0A=20src/backend/access/gist/gistsplit.c=20=20=20=20=20=20=20= =20=20=20=20|=20=204=20+--=0A=20src/backend/access/nbtree/nbtinsert.c=20=20= =20=20=20=20=20=20=20|=2010=20+++----=0A=20= src/backend/access/nbtree/nbtpreprocesskeys.c=20|=2012=20++++----=0A=20= src/backend/access/nbtree/nbtree.c=20=20=20=20=20=20=20=20=20=20=20=20|=20= =202=20+-=0A=20src/backend/access/transam/xact.c=20=20=20=20=20=20=20=20=20= =20=20=20=20|=20=204=20+--=0A=20src/backend/access/transam/xloginsert.c=20= =20=20=20=20=20=20|=20=206=20++--=0A=20src/backend/catalog/dependency.c=20= =20=20=20=20=20=20=20=20=20=20=20=20=20|=2023=20+++++++--------=0A=20= src/backend/catalog/heap.c=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20|=20=202=20+-=0A=20src/backend/catalog/namespace.c=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20|=20=202=20+-=0A=20= src/backend/catalog/pg_constraint.c=20=20=20=20=20=20=20=20=20=20=20|=20=20= 6=20++--=0A=20src/backend/commands/analyze.c=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20|=2029=20+++++++++----------=0A=20= src/backend/commands/async.c=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20|=20=202=20+-=0A=20src/backend/commands/collationcmds.c=20=20=20= =20=20=20=20=20=20=20|=20=205=20++--=0A=20src/backend/commands/explain.c=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=202=20+-=0A=20= src/backend/commands/explain_state.c=20=20=20=20=20=20=20=20=20=20|=20=20= 4=20+--=0A=20src/backend/commands/functioncmds.c=20=20=20=20=20=20=20=20=20= =20=20|=2010=20+++----=0A=20src/backend/storage/file/buffile.c=20=20=20=20= =20=20=20=20=20=20=20=20|=2010=20+++----=0A=2024=20files=20changed,=2082=20= insertions(+),=2095=20deletions(-)=0A=0Adiff=20--git=20= a/src/backend/access/common/tupdesc.c=20= b/src/backend/access/common/tupdesc.c=0Aindex=20d771a265b34..727212e3916=20= 100644=0A---=20a/src/backend/access/common/tupdesc.c=0A+++=20= b/src/backend/access/common/tupdesc.c=0A@@=20-363,7=20+363,7=20@@=20= CreateTupleDescCopyConstr(TupleDesc=20tupdesc)=0A=20=0A=20=09=09if=20= ((cpy->num_defval=20=3D=20constr->num_defval)=20>=200)=0A=20=09=09{=0A-=09= =09=09cpy->defval=20=3D=20(AttrDefault=20*)=20palloc(cpy->num_defval=20*=20= sizeof(AttrDefault));=0A+=09=09=09cpy->defval=20=3D=20= palloc_array(AttrDefault,=20cpy->num_defval);=0A=20=09=09=09= memcpy(cpy->defval,=20constr->defval,=20cpy->num_defval=20*=20= sizeof(AttrDefault));=0A=20=09=09=09for=20(i=20=3D=20cpy->num_defval=20-=20= 1;=20i=20>=3D=200;=20i--)=0A=20=09=09=09=09cpy->defval[i].adbin=20=3D=20= pstrdup(constr->defval[i].adbin);=0A@@=20-371,7=20+371,7=20@@=20= CreateTupleDescCopyConstr(TupleDesc=20tupdesc)=0A=20=0A=20=09=09if=20= (constr->missing)=0A=20=09=09{=0A-=09=09=09cpy->missing=20=3D=20= (AttrMissing=20*)=20palloc(tupdesc->natts=20*=20sizeof(AttrMissing));=0A= +=09=09=09cpy->missing=20=3D=20palloc_array(AttrMissing,=20= tupdesc->natts);=0A=20=09=09=09memcpy(cpy->missing,=20constr->missing,=20= tupdesc->natts=20*=20sizeof(AttrMissing));=0A=20=09=09=09for=20(i=20=3D=20= tupdesc->natts=20-=201;=20i=20>=3D=200;=20i--)=0A=20=09=09=09{=0A@@=20= -388,7=20+388,7=20@@=20CreateTupleDescCopyConstr(TupleDesc=20tupdesc)=0A=20= =0A=20=09=09if=20((cpy->num_check=20=3D=20constr->num_check)=20>=200)=0A=20= =09=09{=0A-=09=09=09cpy->check=20=3D=20(ConstrCheck=20*)=20= palloc(cpy->num_check=20*=20sizeof(ConstrCheck));=0A+=09=09=09cpy->check=20= =3D=20palloc_array(ConstrCheck,=20cpy->num_check);=0A=20=09=09=09= memcpy(cpy->check,=20constr->check,=20cpy->num_check=20*=20= sizeof(ConstrCheck));=0A=20=09=09=09for=20(i=20=3D=20cpy->num_check=20-=20= 1;=20i=20>=3D=200;=20i--)=0A=20=09=09=09{=0Adiff=20--git=20= a/src/backend/access/gin/gindatapage.c=20= b/src/backend/access/gin/gindatapage.c=0Aindex=20= c5d7db28077..6c25e8c320a=20100644=0A---=20= a/src/backend/access/gin/gindatapage.c=0A+++=20= b/src/backend/access/gin/gindatapage.c=0A@@=20-168,7=20+168,7=20@@=20= GinDataLeafPageGetItems(Page=20page,=20int=20*nitems,=20ItemPointerData=20= advancePast)=0A=20=09{=0A=20=09=09ItemPointer=20tmp=20=3D=20= dataLeafPageGetUncompressed(page,=20nitems);=0A=20=0A-=09=09result=20=3D=20= palloc((*nitems)=20*=20sizeof(ItemPointerData));=0A+=09=09result=20=3D=20= palloc_array(ItemPointerData,=20*nitems);=0A=20=09=09memcpy(result,=20= tmp,=20(*nitems)=20*=20sizeof(ItemPointerData));=0A=20=09}=0A=20=0Adiff=20= --git=20a/src/backend/access/gin/ginget.c=20= b/src/backend/access/gin/ginget.c=0Aindex=206b148e69a8e..3027a50f64a=20= 100644=0A---=20a/src/backend/access/gin/ginget.c=0A+++=20= b/src/backend/access/gin/ginget.c=0A@@=20-544,7=20+544,7=20@@=20= startScanKey(GinState=20*ginstate,=20GinScanOpaque=20so,=20GinScanKey=20= key)=0A=20=0A=20=09=09key->nrequired=20=3D=200;=0A=20=09=09= key->nadditional=20=3D=20key->nentries;=0A-=09=09key->additionalEntries=20= =3D=20palloc(key->nadditional=20*=20sizeof(GinScanEntry));=0A+=09=09= key->additionalEntries=20=3D=20palloc_array(GinScanEntry,=20= key->nadditional);=0A=20=09=09for=20(i=20=3D=200;=20i=20<=20= key->nadditional;=20i++)=0A=20=09=09=09key->additionalEntries[i]=20=3D=20= key->scanEntry[i];=0A=20=09}=0A@@=20-577,8=20+577,8=20@@=20= startScanKey(GinState=20*ginstate,=20GinScanOpaque=20so,=20GinScanKey=20= key)=0A=20=0A=20=09=09key->nrequired=20=3D=20i=20+=201;=0A=20=09=09= key->nadditional=20=3D=20key->nentries=20-=20key->nrequired;=0A-=09=09= key->requiredEntries=20=3D=20palloc(key->nrequired=20*=20= sizeof(GinScanEntry));=0A-=09=09key->additionalEntries=20=3D=20= palloc(key->nadditional=20*=20sizeof(GinScanEntry));=0A+=09=09= key->requiredEntries=20=3D=20palloc_array(GinScanEntry,=20= key->nrequired);=0A+=09=09key->additionalEntries=20=3D=20= palloc_array(GinScanEntry,=20key->nadditional);=0A=20=0A=20=09=09j=20=3D=20= 0;=0A=20=09=09for=20(i=20=3D=200;=20i=20<=20key->nrequired;=20i++)=0A@@=20= -595,7=20+595,7=20@@=20startScanKey(GinState=20*ginstate,=20= GinScanOpaque=20so,=20GinScanKey=20key)=0A=20=0A=20=09=09key->nrequired=20= =3D=201;=0A=20=09=09key->nadditional=20=3D=200;=0A-=09=09= key->requiredEntries=20=3D=20palloc(1=20*=20sizeof(GinScanEntry));=0A+=09= =09key->requiredEntries=20=3D=20palloc_array(GinScanEntry,=20= key->nrequired);=0A=20=09=09key->requiredEntries[0]=20=3D=20= key->scanEntry[0];=0A=20=09}=0A=20=09MemoryContextSwitchTo(oldCtx);=0A= diff=20--git=20a/src/backend/access/gin/ginpostinglist.c=20= b/src/backend/access/gin/ginpostinglist.c=0Aindex=20= d8dfcee4bde..74da185db06=20100644=0A---=20= a/src/backend/access/gin/ginpostinglist.c=0A+++=20= b/src/backend/access/gin/ginpostinglist.c=0A@@=20-308,7=20+308,7=20@@=20= ginPostingListDecodeAllSegments(GinPostingList=20*segment,=20int=20len,=20= int=20*ndecoded_=0A=20=09=20*=20Guess=20an=20initial=20size=20of=20the=20= array.=0A=20=09=20*/=0A=20=09nallocated=20=3D=20segment->nbytes=20*=202=20= +=201;=0A-=09result=20=3D=20palloc(nallocated=20*=20= sizeof(ItemPointerData));=0A+=09result=20=3D=20= palloc_array(ItemPointerData,=20nallocated);=0A=20=0A=20=09ndecoded=20=3D=20= 0;=0A=20=09while=20((char=20*)=20segment=20<=20endseg)=0A@@=20-317,7=20= +317,7=20@@=20ginPostingListDecodeAllSegments(GinPostingList=20*segment,=20= int=20len,=20int=20*ndecoded_=0A=20=09=09if=20(ndecoded=20>=3D=20= nallocated)=0A=20=09=09{=0A=20=09=09=09nallocated=20*=3D=202;=0A-=09=09=09= result=20=3D=20repalloc(result,=20nallocated=20*=20= sizeof(ItemPointerData));=0A+=09=09=09result=20=3D=20= repalloc_array(result,=20ItemPointerData,=20nallocated);=0A=20=09=09}=0A=20= =0A=20=09=09/*=20copy=20the=20first=20item=20*/=0A@@=20-335,7=20+335,7=20= @@=20ginPostingListDecodeAllSegments(GinPostingList=20*segment,=20int=20= len,=20int=20*ndecoded_=0A=20=09=09=09if=20(ndecoded=20>=3D=20= nallocated)=0A=20=09=09=09{=0A=20=09=09=09=09nallocated=20*=3D=202;=0A-=09= =09=09=09result=20=3D=20repalloc(result,=20nallocated=20*=20= sizeof(ItemPointerData));=0A+=09=09=09=09result=20=3D=20= repalloc_array(result,=20ItemPointerData,=20nallocated);=0A=20=09=09=09}=0A= =20=0A=20=09=09=09val=20+=3D=20decode_varbyte(&ptr);=0Adiff=20--git=20= a/src/backend/access/gin/ginscan.c=20b/src/backend/access/gin/ginscan.c=0A= index=20fb929761ab7..178ea593fe2=20100644=0A---=20= a/src/backend/access/gin/ginscan.c=0A+++=20= b/src/backend/access/gin/ginscan.c=0A@@=20-282,15=20+282,13=20@@=20= ginNewScanKey(IndexScanDesc=20scan)=0A=20=09oldCtx=20=3D=20= MemoryContextSwitchTo(so->keyCtx);=0A=20=0A=20=09/*=20if=20no=20scan=20= keys=20provided,=20allocate=20extra=20EVERYTHING=20GinScanKey=20*/=0A-=09= so->keys=20=3D=20(GinScanKey)=0A-=09=09palloc(Max(scan->numberOfKeys,=20= 1)=20*=20sizeof(GinScanKeyData));=0A+=09so->keys=20=3D=20= palloc_array(GinScanKeyData,=20Max(scan->numberOfKeys,=201));=0A=20=09= so->nkeys=20=3D=200;=0A=20=0A=20=09/*=20initialize=20expansible=20array=20= of=20GinScanEntry=20pointers=20*/=0A=20=09so->totalentries=20=3D=200;=0A=20= =09so->allocentries=20=3D=2032;=0A-=09so->entries=20=3D=20(GinScanEntry=20= *)=0A-=09=09palloc(so->allocentries=20*=20sizeof(GinScanEntry));=0A+=09= so->entries=20=3D=20palloc_array(GinScanEntry,=20so->allocentries);=0A=20= =0A=20=09so->isVoidRes=20=3D=20false;=0A=20=0A@@=20-423,7=20+421,7=20@@=20= ginNewScanKey(IndexScanDesc=20scan)=0A=20=09=09/*=20We'd=20better=20have=20= made=20at=20least=20one=20normal=20key=20*/=0A=20=09=09= Assert(numExcludeOnly=20<=20so->nkeys);=0A=20=09=09/*=20Make=20a=20= temporary=20array=20to=20hold=20the=20re-ordered=20scan=20keys=20*/=0A-=09= =09tmpkeys=20=3D=20(GinScanKey)=20palloc(so->nkeys=20*=20= sizeof(GinScanKeyData));=0A+=09=09tmpkeys=20=3D=20= palloc_array(GinScanKeyData,=20so->nkeys);=0A=20=09=09/*=20Re-order=20= the=20keys=20...=20*/=0A=20=09=09iNormalKey=20=3D=200;=0A=20=09=09= iExcludeOnly=20=3D=20so->nkeys=20-=20numExcludeOnly;=0Adiff=20--git=20= a/src/backend/access/gist/gistget.c=20= b/src/backend/access/gist/gistget.c=0Aindex=204d7c100d737..c946e818d8f=20= 100644=0A---=20a/src/backend/access/gist/gistget.c=0A+++=20= b/src/backend/access/gist/gistget.c=0A@@=20-668,9=20+668,7=20@@=20= gistgettuple(IndexScanDesc=20scan,=20ScanDirection=20dir)=0A=20=09=09=09=09= =09=09MemoryContext=20oldCxt=20=3D=0A=20=09=09=09=09=09=09=09= MemoryContextSwitchTo(so->giststate->scanCxt);=0A=20=0A-=09=09=09=09=09=09= so->killedItems=20=3D=0A-=09=09=09=09=09=09=09(OffsetNumber=20*)=20= palloc(MaxIndexTuplesPerPage=0A-=09=09=09=09=09=09=09=09=09=09=09=09=09*=20= sizeof(OffsetNumber));=0A+=09=09=09=09=09=09so->killedItems=20=3D=20= palloc_array(OffsetNumber,=20MaxIndexTuplesPerPage);=0A=20=0A=20=09=09=09= =09=09=09MemoryContextSwitchTo(oldCxt);=0A=20=09=09=09=09=09}=0Adiff=20= --git=20a/src/backend/access/gist/gistproc.c=20= b/src/backend/access/gist/gistproc.c=0Aindex=20bb84030b23d..7dd8920f34e=20= 100644=0A---=20a/src/backend/access/gist/gistproc.c=0A+++=20= b/src/backend/access/gist/gistproc.c=0A@@=20-516,8=20+516,8=20@@=20= gist_box_picksplit(PG_FUNCTION_ARGS)=0A=20=09nentries=20=3D=20= context.entriesCount=20=3D=20maxoff=20-=20FirstOffsetNumber=20+=201;=0A=20= =0A=20=09/*=20Allocate=20arrays=20for=20intervals=20along=20axes=20*/=0A= -=09intervalsLower=20=3D=20(SplitInterval=20*)=20palloc(nentries=20*=20= sizeof(SplitInterval));=0A-=09intervalsUpper=20=3D=20(SplitInterval=20*)=20= palloc(nentries=20*=20sizeof(SplitInterval));=0A+=09intervalsLower=20=3D=20= palloc_array(SplitInterval,=20nentries);=0A+=09intervalsUpper=20=3D=20= palloc_array(SplitInterval,=20nentries);=0A=20=0A=20=09/*=0A=20=09=20*=20= Calculate=20the=20overall=20minimum=20bounding=20box=20over=20all=20the=20= entries.=0A@@=20-693,8=20+693,8=20@@=20= gist_box_picksplit(PG_FUNCTION_ARGS)=0A=20=09=20*/=0A=20=0A=20=09/*=20= Allocate=20vectors=20for=20results=20*/=0A-=09v->spl_left=20=3D=20= (OffsetNumber=20*)=20palloc(nentries=20*=20sizeof(OffsetNumber));=0A-=09= v->spl_right=20=3D=20(OffsetNumber=20*)=20palloc(nentries=20*=20= sizeof(OffsetNumber));=0A+=09v->spl_left=20=3D=20= palloc_array(OffsetNumber,=20nentries);=0A+=09v->spl_right=20=3D=20= palloc_array(OffsetNumber,=20nentries);=0A=20=09v->spl_nleft=20=3D=200;=0A= =20=09v->spl_nright=20=3D=200;=0A=20=0A@@=20-707,7=20+707,7=20@@=20= gist_box_picksplit(PG_FUNCTION_ARGS)=0A=20=09=20*=20either=20group=20= without=20affecting=20overlap=20along=20selected=20axis.=0A=20=09=20*/=0A= =20=09commonEntriesCount=20=3D=200;=0A-=09commonEntries=20=3D=20= (CommonEntry=20*)=20palloc(nentries=20*=20sizeof(CommonEntry));=0A+=09= commonEntries=20=3D=20(CommonEntry=20*)=20palloc_array(CommonEntry,=20= nentries);=0A=20=0A=20=09/*=20Helper=20macros=20to=20place=20an=20entry=20= in=20the=20left=20or=20right=20group=20*/=0A=20#define=20PLACE_LEFT(box,=20= off)=09=09=09=09=09\=0Adiff=20--git=20= a/src/backend/access/gist/gistsplit.c=20= b/src/backend/access/gist/gistsplit.c=0Aindex=20dc899565320..dbea49e445f=20= 100644=0A---=20a/src/backend/access/gist/gistsplit.c=0A+++=20= b/src/backend/access/gist/gistsplit.c=0A@@=20-587,8=20+587,8=20@@=20= gistSplitHalf(GIST_SPLITVEC=20*v,=20int=20len)=0A=20=09int=09=09=09i;=0A=20= =0A=20=09v->spl_nright=20=3D=20v->spl_nleft=20=3D=200;=0A-=09v->spl_left=20= =3D=20(OffsetNumber=20*)=20palloc(len=20*=20sizeof(OffsetNumber));=0A-=09= v->spl_right=20=3D=20(OffsetNumber=20*)=20palloc(len=20*=20= sizeof(OffsetNumber));=0A+=09v->spl_left=20=3D=20= palloc_array(OffsetNumber,=20len);=0A+=09v->spl_right=20=3D=20= palloc_array(OffsetNumber,=20len);=0A=20=09for=20(i=20=3D=201;=20i=20<=3D=20= len;=20i++)=0A=20=09=09if=20(i=20<=20len=20/=202)=0A=20=09=09=09= v->spl_right[v->spl_nright++]=20=3D=20i;=0Adiff=20--git=20= a/src/backend/access/nbtree/nbtinsert.c=20= b/src/backend/access/nbtree/nbtinsert.c=0Aindex=20= c8af97dd23d..3b945342d83=20100644=0A---=20= a/src/backend/access/nbtree/nbtinsert.c=0A+++=20= b/src/backend/access/nbtree/nbtinsert.c=0A@@=20-2876,8=20+2876,8=20@@=20= _bt_simpledel_pass(Relation=20rel,=20Buffer=20buffer,=20Relation=20= heapRel,=0A=20=09delstate.bottomup=20=3D=20false;=0A=20=09= delstate.bottomupfreespace=20=3D=200;=0A=20=09delstate.ndeltids=20=3D=20= 0;=0A-=09delstate.deltids=20=3D=20palloc(MaxTIDsPerBTreePage=20*=20= sizeof(TM_IndexDelete));=0A-=09delstate.status=20=3D=20= palloc(MaxTIDsPerBTreePage=20*=20sizeof(TM_IndexStatus));=0A+=09= delstate.deltids=20=3D=20palloc_array(TM_IndexDelete,=20= MaxTIDsPerBTreePage);=0A+=09delstate.status=20=3D=20= palloc_array(TM_IndexStatus,=20MaxTIDsPerBTreePage);=0A=20=0A=20=09for=20= (offnum=20=3D=20minoff;=0A=20=09=09=20offnum=20<=3D=20maxoff;=0A@@=20= -3019,8=20+3019,7=20@@=20_bt_deadblocks(Page=20page,=20OffsetNumber=20= *deletable,=20int=20ndeletable,=0A=20=09=09=09if=20(ntids=20+=201=20>=20= spacentids)=0A=20=09=09=09{=0A=20=09=09=09=09spacentids=20*=3D=202;=0A-=09= =09=09=09tidblocks=20=3D=20(BlockNumber=20*)=0A-=09=09=09=09=09= repalloc(tidblocks,=20sizeof(BlockNumber)=20*=20spacentids);=0A+=09=09=09= =09tidblocks=20=3D=20repalloc_array(tidblocks,=20BlockNumber,=20= spacentids);=0A=20=09=09=09}=0A=20=0A=20=09=09=09tidblocks[ntids++]=20=3D=20= ItemPointerGetBlockNumber(&itup->t_tid);=0A@@=20-3032,8=20+3031,7=20@@=20= _bt_deadblocks(Page=20page,=20OffsetNumber=20*deletable,=20int=20= ndeletable,=0A=20=09=09=09if=20(ntids=20+=20nposting=20>=20spacentids)=0A= =20=09=09=09{=0A=20=09=09=09=09spacentids=20=3D=20Max(spacentids=20*=20= 2,=20ntids=20+=20nposting);=0A-=09=09=09=09tidblocks=20=3D=20= (BlockNumber=20*)=0A-=09=09=09=09=09repalloc(tidblocks,=20= sizeof(BlockNumber)=20*=20spacentids);=0A+=09=09=09=09tidblocks=20=3D=20= repalloc_array(tidblocks,=20BlockNumber,=20spacentids);=0A=20=09=09=09}=0A= =20=0A=20=09=09=09for=20(int=20j=20=3D=200;=20j=20<=20nposting;=20j++)=0A= diff=20--git=20a/src/backend/access/nbtree/nbtpreprocesskeys.c=20= b/src/backend/access/nbtree/nbtpreprocesskeys.c=0Aindex=20= 39c0a5d610f..31bdf359327=20100644=0A---=20= a/src/backend/access/nbtree/nbtpreprocesskeys.c=0A+++=20= b/src/backend/access/nbtree/nbtpreprocesskeys.c=0A@@=20-258,8=20+258,8=20= @@=20_bt_preprocess_keys(IndexScanDesc=20scan)=0A=20=09=09=20*=20a=20= skip=20array's=20scan=20key=0A=20=09=09=20*/=0A=20=09=09if=20= (numberOfKeys=20>=20scan->numberOfKeys)=0A-=09=09=09so->keyData=20=3D=20= repalloc(so->keyData,=0A-=09=09=09=09=09=09=09=09=20=20=20numberOfKeys=20= *=20sizeof(ScanKeyData));=0A+=09=09=09so->keyData=20=3D=20= repalloc_array(so->keyData,=0A+=09=09=09=09=09=09=09=09=09=09=20= ScanKeyData,=20numberOfKeys);=0A=20=09}=0A=20=09else=0A=20=09=09inkeys=20= =3D=20scan->keyData;=0A@@=20-1653,14=20+1653,14=20@@=20= _bt_unmark_keys(IndexScanDesc=20scan,=20int=20*keyDataMap)=0A=20=09=20*=20= Next,=20allocate=20temp=20arrays:=20one=20for=20required=20keys=20= that'll=20remain=0A=20=09=20*=20required,=20the=20other=20for=20all=20= remaining=20keys=0A=20=09=20*/=0A-=09unmarkKeys=20=3D=20palloc(nunmark=20= *=20sizeof(ScanKeyData));=0A-=09keepKeys=20=3D=20= palloc((so->numberOfKeys=20-=20nunmark)=20*=20sizeof(ScanKeyData));=0A+=09= unmarkKeys=20=3D=20palloc_array(ScanKeyData,=20nunmark);=0A+=09keepKeys=20= =3D=20palloc_array(ScanKeyData,=20so->numberOfKeys=20-=20nunmark);=0A=20=09= nunmarked=20=3D=200;=0A=20=09nkept=20=3D=200;=0A=20=09if=20= (so->numArrayKeys)=0A=20=09{=0A-=09=09unmarkOrderProcs=20=3D=20= palloc(nunmark=20*=20sizeof(FmgrInfo));=0A-=09=09keepOrderProcs=20=3D=20= palloc((so->numberOfKeys=20-=20nunmark)=20*=20sizeof(FmgrInfo));=0A+=09=09= unmarkOrderProcs=20=3D=20palloc_array(FmgrInfo,=20nunmark);=0A+=09=09= keepOrderProcs=20=3D=20palloc_array(FmgrInfo,=20so->numberOfKeys=20-=20= nunmark);=0A=20=09}=0A=20=0A=20=09/*=0Adiff=20--git=20= a/src/backend/access/nbtree/nbtree.c=20= b/src/backend/access/nbtree/nbtree.c=0Aindex=20aed74590cf4..e182266e74e=20= 100644=0A---=20a/src/backend/access/nbtree/nbtree.c=0A+++=20= b/src/backend/access/nbtree/nbtree.c=0A@@=20-351,7=20+351,7=20@@=20= btbeginscan(Relation=20rel,=20int=20nkeys,=20int=20norderbys)=0A=20=09= BTScanPosInvalidate(so->currPos);=0A=20=09= BTScanPosInvalidate(so->markPos);=0A=20=09if=20(scan->numberOfKeys=20>=20= 0)=0A-=09=09so->keyData=20=3D=20(ScanKey)=20palloc(scan->numberOfKeys=20= *=20sizeof(ScanKeyData));=0A+=09=09so->keyData=20=3D=20= palloc_array(ScanKeyData,=20scan->numberOfKeys);=0A=20=09else=0A=20=09=09= so->keyData=20=3D=20NULL;=0A=20=0Adiff=20--git=20= a/src/backend/access/transam/xact.c=20= b/src/backend/access/transam/xact.c=0Aindex=20aafc53e0164..500b276c0d9=20= 100644=0A---=20a/src/backend/access/transam/xact.c=0A+++=20= b/src/backend/access/transam/xact.c=0A@@=20-1719,8=20+1719,8=20@@=20= AtSubCommit_childXids(void)=0A=20=09=09=09=09= MemoryContextAlloc(TopTransactionContext,=0A=20=09=09=09=09=09=09=09=09=20= =20=20new_maxChildXids=20*=20sizeof(TransactionId));=0A=20=09=09else=0A-=09= =09=09new_childXids=20=3D=20repalloc(s->parent->childXids,=0A-=09=09=09=09= =09=09=09=09=09=20new_maxChildXids=20*=20sizeof(TransactionId));=0A+=09=09= =09new_childXids=20=3D=20repalloc_array(s->parent->childXids,=0A+=09=09=09= =09=09=09=09=09=09=09=20=20=20TransactionId,=20new_maxChildXids);=0A=20=0A= =20=09=09s->parent->childXids=20=3D=20new_childXids;=0A=20=09=09= s->parent->maxChildXids=20=3D=20new_maxChildXids;=0Adiff=20--git=20= a/src/backend/access/transam/xloginsert.c=20= b/src/backend/access/transam/xloginsert.c=0Aindex=20= e4a819efeeb..57b59ab5c0e=20100644=0A---=20= a/src/backend/access/transam/xloginsert.c=0A+++=20= b/src/backend/access/transam/xloginsert.c=0A@@=20-200,8=20+200,8=20@@=20= XLogEnsureRecordSpace(int=20max_block_id,=20int=20ndatas)=0A=20=0A=20=09= if=20(nbuffers=20>=20max_registered_buffers)=0A=20=09{=0A-=09=09= registered_buffers=20=3D=20(registered_buffer=20*)=0A-=09=09=09= repalloc(registered_buffers,=20sizeof(registered_buffer)=20*=20= nbuffers);=0A+=09=09registered_buffers=20=3D=0A+=09=09=09= repalloc_array(registered_buffers,=20registered_buffer,=20nbuffers);=0A=20= =0A=20=09=09/*=0A=20=09=09=20*=20At=20least=20the=20padding=20bytes=20in=20= the=20structs=20must=20be=20zeroed,=20because=0A@@=20-214,7=20+214,7=20= @@=20XLogEnsureRecordSpace(int=20max_block_id,=20int=20ndatas)=0A=20=0A=20= =09if=20(ndatas=20>=20max_rdatas)=0A=20=09{=0A-=09=09rdatas=20=3D=20= (XLogRecData=20*)=20repalloc(rdatas,=20sizeof(XLogRecData)=20*=20= ndatas);=0A+=09=09rdatas=20=3D=20repalloc_array(rdatas,=20XLogRecData,=20= ndatas);=0A=20=09=09max_rdatas=20=3D=20ndatas;=0A=20=09}=0A=20}=0Adiff=20= --git=20a/src/backend/catalog/dependency.c=20= b/src/backend/catalog/dependency.c=0Aindex=20fdb8e67e1f5..c3f778dca6d=20= 100644=0A---=20a/src/backend/catalog/dependency.c=0A+++=20= b/src/backend/catalog/dependency.c=0A@@=20-966,9=20+966,8=20@@=20= findDependentObjects(const=20ObjectAddress=20*object,=0A=20=09=09{=0A=20=09= =09=09/*=20enlarge=20array=20if=20needed=20*/=0A=20=09=09=09= maxDependentObjects=20*=3D=202;=0A-=09=09=09dependentObjects=20=3D=20= (ObjectAddressAndFlags=20*)=0A-=09=09=09=09repalloc(dependentObjects,=0A= -=09=09=09=09=09=09=20maxDependentObjects=20*=20= sizeof(ObjectAddressAndFlags));=0A+=09=09=09dependentObjects=20=3D=20= repalloc_array(dependentObjects,=0A+=09=09=09=09=09=09=09=09=09=09=09=20=20= ObjectAddressAndFlags,=20maxDependentObjects);=0A=20=09=09}=0A=20=0A=20=09= =09dependentObjects[numDependentObjects].obj=20=3D=20otherObject;=0A@@=20= -2710,8=20+2709,7=20@@=20add_object_address(Oid=20classId,=20Oid=20= objectId,=20int32=20subId,=0A=20=09if=20(addrs->numrefs=20>=3D=20= addrs->maxrefs)=0A=20=09{=0A=20=09=09addrs->maxrefs=20*=3D=202;=0A-=09=09= addrs->refs=20=3D=20(ObjectAddress=20*)=0A-=09=09=09= repalloc(addrs->refs,=20addrs->maxrefs=20*=20sizeof(ObjectAddress));=0A+=09= =09addrs->refs=20=3D=20repalloc_array(addrs->refs,=20ObjectAddress,=20= addrs->maxrefs);=0A=20=09=09Assert(!addrs->extras);=0A=20=09}=0A=20=09/*=20= record=20this=20item=20*/=0A@@=20-2737,8=20+2735,8=20@@=20= add_exact_object_address(const=20ObjectAddress=20*object,=0A=20=09if=20= (addrs->numrefs=20>=3D=20addrs->maxrefs)=0A=20=09{=0A=20=09=09= addrs->maxrefs=20*=3D=202;=0A-=09=09addrs->refs=20=3D=20(ObjectAddress=20= *)=0A-=09=09=09repalloc(addrs->refs,=20addrs->maxrefs=20*=20= sizeof(ObjectAddress));=0A+=09=09addrs->refs=20=3D=20= repalloc_array(addrs->refs,=0A+=09=09=09=09=09=09=09=09=09=20= ObjectAddress,=20addrs->maxrefs);=0A=20=09=09Assert(!addrs->extras);=0A=20= =09}=0A=20=09/*=20record=20this=20item=20*/=0A@@=20-2762,17=20+2760,16=20= @@=20add_exact_object_address_extra(const=20ObjectAddress=20*object,=0A=20= =0A=20=09/*=20allocate=20extra=20space=20if=20first=20time=20*/=0A=20=09= if=20(!addrs->extras)=0A-=09=09addrs->extras=20=3D=20(ObjectAddressExtra=20= *)=0A-=09=09=09palloc(addrs->maxrefs=20*=20sizeof(ObjectAddressExtra));=0A= +=09=09addrs->extras=20=3D=20palloc_array(ObjectAddressExtra,=20= addrs->maxrefs);=0A=20=0A=20=09/*=20enlarge=20array=20if=20needed=20*/=0A= =20=09if=20(addrs->numrefs=20>=3D=20addrs->maxrefs)=0A=20=09{=0A=20=09=09= addrs->maxrefs=20*=3D=202;=0A-=09=09addrs->refs=20=3D=20(ObjectAddress=20= *)=0A-=09=09=09repalloc(addrs->refs,=20addrs->maxrefs=20*=20= sizeof(ObjectAddress));=0A-=09=09addrs->extras=20=3D=20= (ObjectAddressExtra=20*)=0A-=09=09=09repalloc(addrs->extras,=20= addrs->maxrefs=20*=20sizeof(ObjectAddressExtra));=0A+=09=09addrs->refs=20= =3D=20repalloc_array(addrs->refs,=0A+=09=09=09=09=09=09=09=09=09=20= ObjectAddress,=20addrs->maxrefs);=0A+=09=09addrs->extras=20=3D=20= repalloc_array(addrs->extras,=0A+=09=09=09=09=09=09=09=09=09=20=20=20= ObjectAddressExtra,=20addrs->maxrefs);=0A=20=09}=0A=20=09/*=20record=20= this=20item=20*/=0A=20=09item=20=3D=20addrs->refs=20+=20addrs->numrefs;=0A= diff=20--git=20a/src/backend/catalog/heap.c=20= b/src/backend/catalog/heap.c=0Aindex=205748aa9a1a9..e454fa8755e=20100644=0A= ---=20a/src/backend/catalog/heap.c=0A+++=20b/src/backend/catalog/heap.c=0A= @@=20-2174,7=20+2174,7=20@@=20StoreRelCheck(Relation=20rel,=20const=20= char=20*ccname,=20Node=20*expr,=0A=20=09=09ListCell=20=20=20*vl;=0A=20=09= =09int=09=09=09i=20=3D=200;=0A=20=0A-=09=09attNos=20=3D=20(int16=20*)=20= palloc(keycount=20*=20sizeof(int16));=0A+=09=09attNos=20=3D=20= palloc_array(int16,=20keycount);=0A=20=09=09foreach(vl,=20varList)=0A=20=09= =09{=0A=20=09=09=09Var=09=09=20=20=20*var=20=3D=20(Var=20*)=20= lfirst(vl);=0Adiff=20--git=20a/src/backend/catalog/namespace.c=20= b/src/backend/catalog/namespace.c=0Aindex=2056b87d878e8..f21dce6a23b=20= 100644=0A---=20a/src/backend/catalog/namespace.c=0A+++=20= b/src/backend/catalog/namespace.c=0A@@=20-1650,7=20+1650,7=20@@=20= MatchNamedCall(HeapTuple=20proctup,=20int=20nargs,=20List=20*argnames,=0A= =20=09Assert(include_out_arguments=20?=20(pronargs=20=3D=3D=20= pronallargs)=20:=20(pronargs=20<=3D=20pronallargs));=0A=20=0A=20=09/*=20= initialize=20state=20for=20matching=20*/=0A-=09*argnumbers=20=3D=20(int=20= *)=20palloc(pronargs=20*=20sizeof(int));=0A+=09*argnumbers=20=3D=20= palloc_array(int,=20pronargs);=0A=20=09memset(arggiven,=20false,=20= pronargs=20*=20sizeof(bool));=0A=20=0A=20=09/*=20there=20are=20= numposargs=20positional=20args=20before=20the=20named=20args=20*/=0Adiff=20= --git=20a/src/backend/catalog/pg_constraint.c=20= b/src/backend/catalog/pg_constraint.c=0Aindex=20b12765ae691..a21d673a65a=20= 100644=0A---=20a/src/backend/catalog/pg_constraint.c=0A+++=20= b/src/backend/catalog/pg_constraint.c=0A@@=20-118,7=20+118,7=20@@=20= CreateConstraintEntry(const=20char=20*constraintName,=0A=20=09{=0A=20=09=09= Datum=09=20=20=20*conkey;=0A=20=0A-=09=09conkey=20=3D=20(Datum=20*)=20= palloc(constraintNKeys=20*=20sizeof(Datum));=0A+=09=09conkey=20=3D=20= palloc_array(Datum,=20constraintNKeys);=0A=20=09=09for=20(i=20=3D=200;=20= i=20<=20constraintNKeys;=20i++)=0A=20=09=09=09conkey[i]=20=3D=20= Int16GetDatum(constraintKey[i]);=0A=20=09=09conkeyArray=20=3D=20= construct_array_builtin(conkey,=20constraintNKeys,=20INT2OID);=0A@@=20= -131,7=20+131,7=20@@=20CreateConstraintEntry(const=20char=20= *constraintName,=0A=20=09=09Datum=09=20=20=20*fkdatums;=0A=20=09=09int=09= =09=09nkeys=20=3D=20Max(foreignNKeys,=20numFkDeleteSetCols);=0A=20=0A-=09= =09fkdatums=20=3D=20(Datum=20*)=20palloc(nkeys=20*=20sizeof(Datum));=0A+=09= =09fkdatums=20=3D=20palloc_array(Datum,=20nkeys);=0A=20=09=09for=20(i=20= =3D=200;=20i=20<=20foreignNKeys;=20i++)=0A=20=09=09=09fkdatums[i]=20=3D=20= Int16GetDatum(foreignKey[i]);=0A=20=09=09confkeyArray=20=3D=20= construct_array_builtin(fkdatums,=20foreignNKeys,=20INT2OID);=0A@@=20= -167,7=20+167,7=20@@=20CreateConstraintEntry(const=20char=20= *constraintName,=0A=20=09{=0A=20=09=09Datum=09=20=20=20*opdatums;=0A=20=0A= -=09=09opdatums=20=3D=20(Datum=20*)=20palloc(constraintNKeys=20*=20= sizeof(Datum));=0A+=09=09opdatums=20=3D=20palloc_array(Datum,=20= constraintNKeys);=0A=20=09=09for=20(i=20=3D=200;=20i=20<=20= constraintNKeys;=20i++)=0A=20=09=09=09opdatums[i]=20=3D=20= ObjectIdGetDatum(exclOp[i]);=0A=20=09=09conexclopArray=20=3D=20= construct_array_builtin(opdatums,=20constraintNKeys,=20OIDOID);=0Adiff=20= --git=20a/src/backend/commands/analyze.c=20= b/src/backend/commands/analyze.c=0Aindex=20eeed91be266..dd2ac5518c0=20= 100644=0A---=20a/src/backend/commands/analyze.c=0A+++=20= b/src/backend/commands/analyze.c=0A@@=20-529,7=20+529,7=20@@=20= do_analyze_rel(Relation=20onerel,=20const=20VacuumParams=20params,=0A=20=09= /*=0A=20=09=20*=20Acquire=20the=20sample=20rows=0A=20=09=20*/=0A-=09rows=20= =3D=20(HeapTuple=20*)=20palloc(targrows=20*=20sizeof(HeapTuple));=0A+=09= rows=20=3D=20palloc_array(HeapTuple,=20targrows);=0A=20=09= pgstat_progress_update_param(PROGRESS_ANALYZE_PHASE,=0A=20=09=09=09=09=09= =09=09=09=20inh=20?=20PROGRESS_ANALYZE_PHASE_ACQUIRE_SAMPLE_ROWS_INH=20:=0A= =20=09=09=09=09=09=09=09=09=20= PROGRESS_ANALYZE_PHASE_ACQUIRE_SAMPLE_ROWS);=0A@@=20-924,8=20+924,8=20@@=20= compute_index_stats(Relation=20onerel,=20double=20totalrows,=0A=20=09=09= predicate=20=3D=20ExecPrepareQual(indexInfo->ii_Predicate,=20estate);=0A=20= =0A=20=09=09/*=20Compute=20and=20save=20index=20expression=20values=20*/=0A= -=09=09exprvals=20=3D=20(Datum=20*)=20palloc(numrows=20*=20attr_cnt=20*=20= sizeof(Datum));=0A-=09=09exprnulls=20=3D=20(bool=20*)=20palloc(numrows=20= *=20attr_cnt=20*=20sizeof(bool));=0A+=09=09exprvals=20=3D=20= palloc_array(Datum,=20numrows=20*=20attr_cnt);=0A+=09=09exprnulls=20=3D=20= palloc_array(bool,=20numrows=20*=20attr_cnt);=0A=20=09=09numindexrows=20= =3D=200;=0A=20=09=09tcnt=20=3D=200;=0A=20=09=09for=20(rowno=20=3D=200;=20= rowno=20<=20numrows;=20rowno++)=0A@@=20-1440,10=20+1440,9=20@@=20= acquire_inherited_sample_rows(Relation=20onerel,=20int=20elevel,=0A=20=09= =20*=20Identify=20acquirefuncs=20to=20use,=20and=20count=20blocks=20in=20= all=20the=20relations.=0A=20=09=20*=20The=20result=20could=20overflow=20= BlockNumber,=20so=20we=20use=20double=20arithmetic.=0A=20=09=20*/=0A-=09= rels=20=3D=20(Relation=20*)=20palloc(list_length(tableOIDs)=20*=20= sizeof(Relation));=0A-=09acquirefuncs=20=3D=20(AcquireSampleRowsFunc=20= *)=0A-=09=09palloc(list_length(tableOIDs)=20*=20= sizeof(AcquireSampleRowsFunc));=0A-=09relblocks=20=3D=20(double=20*)=20= palloc(list_length(tableOIDs)=20*=20sizeof(double));=0A+=09rels=20=3D=20= palloc_array(Relation,=20list_length(tableOIDs));=0A+=09acquirefuncs=20=3D= =20palloc_array(AcquireSampleRowsFunc,=20list_length(tableOIDs));=0A+=09= relblocks=20=3D=20palloc_array(double,=20list_length(tableOIDs));=0A=20=09= totalblocks=20=3D=200;=0A=20=09nrels=20=3D=200;=0A=20=09has_child=20=3D=20= false;=0A@@=20-1718,7=20+1717,7=20@@=20update_attstats(Oid=20relid,=20= bool=20inh,=20int=20natts,=20VacAttrStats=20**vacattrstats)=0A=20=09=09=09= if=20(stats->stanumbers[k]=20!=3D=20NULL)=0A=20=09=09=09{=0A=20=09=09=09=09= int=09=09=09nnum=20=3D=20stats->numnumbers[k];=0A-=09=09=09=09Datum=09=20= =20=20*numdatums=20=3D=20(Datum=20*)=20palloc(nnum=20*=20sizeof(Datum));=0A= +=09=09=09=09Datum=09=20=20=20*numdatums=20=3D=20palloc_array(Datum,=20= nnum);=0A=20=09=09=09=09ArrayType=20=20*arry;=0A=20=0A=20=09=09=09=09for=20= (n=20=3D=200;=20n=20<=20nnum;=20n++)=0A@@=20-2090,7=20+2089,7=20@@=20= compute_distinct_stats(VacAttrStatsP=20stats,=0A=20=09track_max=20=3D=20= 2=20*=20num_mcv;=0A=20=09if=20(track_max=20<=2010)=0A=20=09=09track_max=20= =3D=2010;=0A-=09track=20=3D=20(TrackItem=20*)=20palloc(track_max=20*=20= sizeof(TrackItem));=0A+=09track=20=3D=20palloc_array(TrackItem,=20= track_max);=0A=20=09track_cnt=20=3D=200;=0A=20=0A=20=09= fmgr_info(mystats->eqfunc,=20&f_cmpeq);=0A@@=20-2327,7=20+2326,7=20@@=20= compute_distinct_stats(VacAttrStatsP=20stats,=0A=20=0A=20=09=09=09if=20= (num_mcv=20>=200)=0A=20=09=09=09{=0A-=09=09=09=09mcv_counts=20=3D=20(int=20= *)=20palloc(num_mcv=20*=20sizeof(int));=0A+=09=09=09=09mcv_counts=20=3D=20= palloc_array(int,=20num_mcv);=0A=20=09=09=09=09for=20(i=20=3D=200;=20i=20= <=20num_mcv;=20i++)=0A=20=09=09=09=09=09mcv_counts[i]=20=3D=20= track[i].count;=0A=20=0A@@=20-2347,8=20+2346,8=20@@=20= compute_distinct_stats(VacAttrStatsP=20stats,=0A=20=0A=20=09=09=09/*=20= Must=20copy=20the=20target=20values=20into=20anl_context=20*/=0A=20=09=09= =09old_context=20=3D=20MemoryContextSwitchTo(stats->anl_context);=0A-=09=09= =09mcv_values=20=3D=20(Datum=20*)=20palloc(num_mcv=20*=20sizeof(Datum));=0A= -=09=09=09mcv_freqs=20=3D=20(float4=20*)=20palloc(num_mcv=20*=20= sizeof(float4));=0A+=09=09=09mcv_values=20=3D=20palloc_array(Datum,=20= num_mcv);=0A+=09=09=09mcv_freqs=20=3D=20palloc_array(float4,=20num_mcv);=0A= =20=09=09=09for=20(i=20=3D=200;=20i=20<=20num_mcv;=20i++)=0A=20=09=09=09= {=0A=20=09=09=09=09mcv_values[i]=20=3D=20datumCopy(track[i].value,=0A@@=20= -2426,9=20+2425,9=20@@=20compute_scalar_stats(VacAttrStatsP=20stats,=0A=20= =09int=09=09=09num_bins=20=3D=20stats->attstattarget;=0A=20=09= StdAnalyzeData=20*mystats=20=3D=20(StdAnalyzeData=20*)=20= stats->extra_data;=0A=20=0A-=09values=20=3D=20(ScalarItem=20*)=20= palloc(samplerows=20*=20sizeof(ScalarItem));=0A-=09tupnoLink=20=3D=20= (int=20*)=20palloc(samplerows=20*=20sizeof(int));=0A-=09track=20=3D=20= (ScalarMCVItem=20*)=20palloc(num_mcv=20*=20sizeof(ScalarMCVItem));=0A+=09= values=20=3D=20palloc_array(ScalarItem,=20samplerows);=0A+=09tupnoLink=20= =3D=20palloc_array(int,=20samplerows);=0A+=09track=20=3D=20= palloc_array(ScalarMCVItem,=20num_mcv);=0A=20=0A=20=09memset(&ssup,=200,=20= sizeof(ssup));=0A=20=09ssup.ssup_cxt=20=3D=20CurrentMemoryContext;=0A= diff=20--git=20a/src/backend/commands/async.c=20= b/src/backend/commands/async.c=0Aindex=205c9a56c3d40..3c83c8e91b9=20= 100644=0A---=20a/src/backend/commands/async.c=0A+++=20= b/src/backend/commands/async.c=0A@@=20-1112,7=20+1112,7=20@@=20= pg_listening_channels(PG_FUNCTION_ARGS)=0A=20=09=09=09MemoryContext=20= oldcontext;=0A=20=0A=20=09=09=09oldcontext=20=3D=20= MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);=0A-=09=09=09= status=20=3D=20(HASH_SEQ_STATUS=20*)=20palloc(sizeof(HASH_SEQ_STATUS));=0A= +=09=09=09status=20=3D=20palloc_object(HASH_SEQ_STATUS);=0A=20=09=09=09= hash_seq_init(status,=20localChannelTable);=0A=20=09=09=09= funcctx->user_fctx=20=3D=20status;=0A=20=09=09=09= MemoryContextSwitchTo(oldcontext);=0Adiff=20--git=20= a/src/backend/commands/collationcmds.c=20= b/src/backend/commands/collationcmds.c=0Aindex=20= 0bc31ec2b6f..cfa0e4610d9=20100644=0A---=20= a/src/backend/commands/collationcmds.c=0A+++=20= b/src/backend/commands/collationcmds.c=0A@@=20-867,7=20+867,7=20@@=20= pg_import_system_collations(PG_FUNCTION_ARGS)=0A=20=0A=20=09=09/*=20= expansible=20array=20of=20aliases=20*/=0A=20=09=09maxaliases=20=3D=20= 100;=0A-=09=09aliases=20=3D=20(CollAliasData=20*)=20palloc(maxaliases=20= *=20sizeof(CollAliasData));=0A+=09=09aliases=20=3D=20= palloc_array(CollAliasData,=20maxaliases);=0A=20=09=09naliases=20=3D=20= 0;=0A=20=0A=20=09=09locale_a_handle=20=3D=20OpenPipeStream("locale=20= -a",=20"r");=0A@@=20-911,8=20+911,7=20@@=20= pg_import_system_collations(PG_FUNCTION_ARGS)=0A=20=09=09=09=09if=20= (naliases=20>=3D=20maxaliases)=0A=20=09=09=09=09{=0A=20=09=09=09=09=09= maxaliases=20*=3D=202;=0A-=09=09=09=09=09aliases=20=3D=20(CollAliasData=20= *)=0A-=09=09=09=09=09=09repalloc(aliases,=20maxaliases=20*=20= sizeof(CollAliasData));=0A+=09=09=09=09=09aliases=20=3D=20= repalloc_array(aliases,=20CollAliasData,=20maxaliases);=0A=20=09=09=09=09= }=0A=20=09=09=09=09aliases[naliases].localename=20=3D=20= pstrdup(localebuf);=0A=20=09=09=09=09aliases[naliases].alias=20=3D=20= pstrdup(alias);=0Adiff=20--git=20a/src/backend/commands/explain.c=20= b/src/backend/commands/explain.c=0Aindex=20296ea8a1ed2..1d36fcb35af=20= 100644=0A---=20a/src/backend/commands/explain.c=0A+++=20= b/src/backend/commands/explain.c=0A@@=20-5015,7=20+5015,7=20@@=20= ExplainCreateWorkersState(int=20num_workers)=0A=20=09= wstate->worker_inited=20=3D=20(bool=20*)=20palloc0(num_workers=20*=20= sizeof(bool));=0A=20=09wstate->worker_str=20=3D=20(StringInfoData=20*)=0A= =20=09=09palloc0(num_workers=20*=20sizeof(StringInfoData));=0A-=09= wstate->worker_state_save=20=3D=20(int=20*)=20palloc(num_workers=20*=20= sizeof(int));=0A+=09wstate->worker_state_save=20=3D=20palloc_array(int,=20= num_workers);=0A=20=09return=20wstate;=0A=20}=0A=20=0Adiff=20--git=20= a/src/backend/commands/explain_state.c=20= b/src/backend/commands/explain_state.c=0Aindex=20= 77f59b8e500..e1cf7db92cf=20100644=0A---=20= a/src/backend/commands/explain_state.c=0A+++=20= b/src/backend/commands/explain_state.c=0A@@=20-343,8=20+343,8=20@@=20= RegisterExtensionExplainOption(const=20char=20*option_name,=0A=20=09{=0A=20= =09=09int=09=09=09i=20=3D=20= pg_nextpower2_32(ExplainExtensionOptionsAssigned=20+=201);=0A=20=0A-=09=09= ExplainExtensionOptionArray=20=3D=20(ExplainExtensionOption=20*)=0A-=09=09= =09repalloc(ExplainExtensionOptionArray,=20i=20*=20= sizeof(ExplainExtensionOption));=0A+=09=09ExplainExtensionOptionArray=20= =3D=20repalloc_array(ExplainExtensionOptionArray,=0A+=09=09=09=09=09=09=09= =09=09=09=09=09=09=20ExplainExtensionOption,=20i);=0A=20=09=09= ExplainExtensionOptionsAllocated=20=3D=20i;=0A=20=09}=0A=20=0Adiff=20= --git=20a/src/backend/commands/functioncmds.c=20= b/src/backend/commands/functioncmds.c=0Aindex=203afd762e9dc..9133606d949=20= 100644=0A---=20a/src/backend/commands/functioncmds.c=0A+++=20= b/src/backend/commands/functioncmds.c=0A@@=20-213,10=20+213,10=20@@=20= interpret_function_parameter_list(ParseState=20*pstate,=0A=20=09= *variadicArgType=20=3D=20InvalidOid;=09/*=20default=20result=20*/=0A=20=09= *requiredResultType=20=3D=20InvalidOid;=09/*=20default=20result=20*/=0A=20= =0A-=09inTypes=20=3D=20(Oid=20*)=20palloc(parameterCount=20*=20= sizeof(Oid));=0A-=09allTypes=20=3D=20(Datum=20*)=20palloc(parameterCount=20= *=20sizeof(Datum));=0A-=09paramModes=20=3D=20(Datum=20*)=20= palloc(parameterCount=20*=20sizeof(Datum));=0A-=09paramNames=20=3D=20= (Datum=20*)=20palloc0(parameterCount=20*=20sizeof(Datum));=0A+=09inTypes=20= =3D=20palloc_array(Oid,=20parameterCount);=0A+=09allTypes=20=3D=20= palloc_array(Datum,=20parameterCount);=0A+=09paramModes=20=3D=20= palloc_array(Datum,=20parameterCount);=0A+=09paramNames=20=3D=20= palloc0_array(Datum,=20parameterCount);=0A=20=09*parameterDefaults=20=3D=20= NIL;=0A=20=0A=20=09/*=20Scan=20the=20list=20and=20extract=20data=20into=20= work=20arrays=20*/=0A@@=20-918,7=20+918,7=20@@=20interpret_AS_clause(Oid=20= languageOid,=20const=20char=20*languageName,=0A=20=0A=20=09=09= pinfo->fname=20=3D=20funcname;=0A=20=09=09pinfo->nargs=20=3D=20= list_length(parameterTypes);=0A-=09=09pinfo->argtypes=20=3D=20(Oid=20*)=20= palloc(pinfo->nargs=20*=20sizeof(Oid));=0A+=09=09pinfo->argtypes=20=3D=20= palloc_array(Oid,=20pinfo->nargs);=0A=20=09=09pinfo->argnames=20=3D=20= (char=20**)=20palloc(pinfo->nargs=20*=20sizeof(char=20*));=0A=20=09=09= for=20(int=20i=20=3D=200;=20i=20<=20list_length(parameterTypes);=20i++)=0A= =20=09=09{=0Adiff=20--git=20a/src/backend/storage/file/buffile.c=20= b/src/backend/storage/file/buffile.c=0Aindex=20c4afe4d368a..e2e3a7c4854=20= 100644=0A---=20a/src/backend/storage/file/buffile.c=0A+++=20= b/src/backend/storage/file/buffile.c=0A@@=20-141,7=20+141,7=20@@=20= makeBufFile(File=20firstfile)=0A=20{=0A=20=09BufFile=20=20=20=20*file=20= =3D=20makeBufFileCommon(1);=0A=20=0A-=09file->files=20=3D=20= palloc_object(File);=0A+=09file->files=20=3D=20palloc_array(File,=201);=0A= =20=09file->files[0]=20=3D=20firstfile;=0A=20=09file->readOnly=20=3D=20= false;=0A=20=09file->fileset=20=3D=20NULL;=0A@@=20-172,8=20+172,7=20@@=20= extendBufFile(BufFile=20*file)=0A=20=0A=20=09CurrentResourceOwner=20=3D=20= oldowner;=0A=20=0A-=09file->files=20=3D=20(File=20*)=20= repalloc(file->files,=0A-=09=09=09=09=09=09=09=09=09(file->numFiles=20+=20= 1)=20*=20sizeof(File));=0A+=09file->files=20=3D=20= repalloc_array(file->files,=20File,=20file->numFiles=20+=201);=0A=20=09= file->files[file->numFiles]=20=3D=20pfile;=0A=20=09file->numFiles++;=0A=20= }=0A@@=20-272,7=20+271,7=20@@=20BufFileCreateFileSet(FileSet=20*fileset,=20= const=20char=20*name)=0A=20=09file=20=3D=20makeBufFileCommon(1);=0A=20=09= file->fileset=20=3D=20fileset;=0A=20=09file->name=20=3D=20pstrdup(name);=0A= -=09file->files=20=3D=20palloc_object(File);=0A+=09file->files=20=3D=20= palloc_array(File,=201);=0A=20=09file->files[0]=20=3D=20= MakeNewFileSetSegment(file,=200);=0A=20=09file->readOnly=20=3D=20false;=0A= =20=0A@@=20-911,8=20+910,7=20@@=20BufFileAppend(BufFile=20*target,=20= BufFile=20*source)=0A=20=09if=20(target->resowner=20!=3D=20= source->resowner)=0A=20=09=09elog(ERROR,=20"could=20not=20append=20= BufFile=20with=20non-matching=20resource=20owner");=0A=20=0A-=09= target->files=20=3D=20(File=20*)=0A-=09=09repalloc(target->files,=20= sizeof(File)=20*=20newNumFiles);=0A+=09target->files=20=3D=20= repalloc_array(target->files,=20File,=20newNumFiles);=0A=20=09for=20(i=20= =3D=20target->numFiles;=20i=20<=20newNumFiles;=20i++)=0A=20=09=09= target->files[i]=20=3D=20source->files[i=20-=20target->numFiles];=0A=20=09= target->numFiles=20=3D=20newNumFiles;=0A--=20=0A2.50.1=20(Apple=20= Git-155)=0A=0A= --Apple-Mail=_CB18A258-38A0-464C-8292-69D09459849E--