Re: Consistently use palloc_object() and palloc_array()

From: David Geier <geidav(dot)pg(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Michael Paquier <michael(at)paquier(dot)xyz>
Cc: Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Consistently use palloc_object() and palloc_array()
Date: 2025-12-04 09:31:41
Message-ID: 4ab4a12b-49e9-4ebf-9055-225c8055fed0@gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 03.12.2025 01:40, Tom Lane wrote:
> Michael Paquier <michael(at)paquier(dot)xyz> writes:
>> It may be a good idea to split the patch into two parts, at least:
>> - One for the bulk of the changes, for the straight-forward changes.
>> Most of what you are suggesting are that for palloc_object and
>> palloc_array which are dropped-in replacements. Checking that these
>> assemble the same before and after offers one extra layer of
>> confidence.
>> - Second one for the more dubious changes.
>
> Yeah, I was thinking the same. Some of those might perhaps be bugs
> that we want to back-patch, so they need to be looked at in a
> different way.
>
> regards, tom lane

Attached are the two patches, rebased on latest master.

The first one contains all changes that either result in no changes to
the disassembly, or only in changes due to the line counts; because
elog.h makes use of __LINE__.

The second patch contains the remaining changes, which is only 11 files.

contrib/fuzzystrmatch/fuzzystrmatch.c: semantic changes, e.g.
palloc(sizeof(char) * strlen(word) + 1);
=>
palloc_array(char, strlen(word) + 1);

contrib/pg_buffercache/pg_buffercache_pages.c: semantic change
palloc(sizeof(uint64) * os_page_count);
=>
palloc_array(int, os_page_count);

src/test/modules/test_rbtree/test_rbtree.c: different way to get pointer
return (RBTNode *) palloc(sizeof(IntRBTreeNode));
=>
return &palloc_object(IntRBTreeNode)->rbtnode;

contrib/hstore/hstore_gin.c
contrib/hstore/hstore_op.c
contrib/pg_trgm/trgm_op.c
contrib/postgres_fdw/postgres_fdw.c
src/backend/executor/execPartition.c
src/backend/partitioning/partprune.c
src/backend/statistics/mvdistinct.c
src/backend/storage/buffer/bufmgr.c
All files contain arithmetic expressions for the count argument of
palloc[0]_array(). The parentheses can change the order in which the
arguments are evaluated which changes the generated code.

--
David Geier

Attachment Content-Type Size
v2-0002-Consistently-use-palloc_object-and-palloc_array-diff.patch text/x-patch 24.9 KB
v2-0001-Consistently-use-palloc_object-and-palloc_array-iden.patch text/x-patch 609.7 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Daniel Gustafsson 2025-12-04 09:34:34 Re: Remove unused function parameters, part 2: replication
Previous Message shveta malik 2025-12-04 09:30:27 Re: POC: enable logical decoding when wal_level = 'replica' without a server restart