From 1b105f9472bdb9a68f709778afafb494997267bd Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 10 Dec 2025 07:36:46 +0900 Subject: [PATCH] Use palloc_object() and palloc_array() in backend code The idea is to encourage more the use of these new routines across the tree, as these offer stronger type safety guarantees than palloc(). This batch of changes includes most of the trivial changes suggested by the author for src/backend/. A total of 334 files are updated here. Among these files, 48 of them have their build change slightly; these are caused by line number changes as the new allocation formulas are simpler, shaving around 100 lines of code in total. Similar work has been done in 0c3c5c3b06a3 and 31d3847a37be. Author: David Geier Discussion: https://postgr.es/m/ad0748d4-3080-436e-b0bc-ac8f86a3466a@gmail.com --- src/backend/access/brin/brin.c | 8 +- src/backend/access/brin/brin_minmax_multi.c | 4 +- src/backend/access/brin/brin_revmap.c | 2 +- src/backend/access/brin/brin_tuple.c | 15 ++- src/backend/access/common/attmap.c | 4 +- src/backend/access/common/heaptuple.c | 8 +- src/backend/access/common/printtup.c | 2 +- src/backend/access/common/reloptions.c | 6 +- src/backend/access/common/tidstore.c | 8 +- src/backend/access/common/toast_internals.c | 2 +- src/backend/access/common/tupconvert.c | 20 ++-- src/backend/access/common/tupdesc.c | 2 +- src/backend/access/gin/ginbtree.c | 6 +- src/backend/access/gin/ginbulk.c | 5 +- src/backend/access/gin/gindatapage.c | 14 +-- src/backend/access/gin/ginentrypage.c | 4 +- src/backend/access/gin/ginget.c | 4 +- src/backend/access/gin/gininsert.c | 16 ++-- src/backend/access/gin/ginscan.c | 13 +-- src/backend/access/gin/ginutil.c | 10 +- src/backend/access/gin/ginvacuum.c | 8 +- src/backend/access/gist/gist.c | 22 ++--- src/backend/access/gist/gistbuild.c | 10 +- src/backend/access/gist/gistbuildbuffers.c | 14 +-- src/backend/access/gist/gistproc.c | 26 ++--- src/backend/access/gist/gistscan.c | 6 +- src/backend/access/gist/gistsplit.c | 8 +- src/backend/access/gist/gistutil.c | 4 +- src/backend/access/gist/gistvacuum.c | 4 +- src/backend/access/hash/hash.c | 9 +- src/backend/access/hash/hashsort.c | 2 +- src/backend/access/heap/heapam.c | 14 +-- src/backend/access/heap/heapam_handler.c | 6 +- src/backend/access/heap/rewriteheap.c | 2 +- src/backend/access/heap/vacuumlazy.c | 6 +- src/backend/access/index/amvalidate.c | 2 +- src/backend/access/index/genam.c | 14 +-- src/backend/access/nbtree/nbtdedup.c | 8 +- src/backend/access/nbtree/nbtinsert.c | 2 +- src/backend/access/nbtree/nbtpage.c | 2 +- src/backend/access/nbtree/nbtree.c | 9 +- src/backend/access/nbtree/nbtsearch.c | 2 +- src/backend/access/nbtree/nbtsort.c | 32 +++---- src/backend/access/nbtree/nbtsplitloc.c | 2 +- src/backend/access/nbtree/nbtxlog.c | 2 +- src/backend/access/spgist/spgdoinsert.c | 33 ++++--- src/backend/access/spgist/spginsert.c | 2 +- src/backend/access/spgist/spgkdtreeproc.c | 14 +-- src/backend/access/spgist/spgproc.c | 4 +- src/backend/access/spgist/spgquadtreeproc.c | 22 ++--- src/backend/access/spgist/spgscan.c | 30 +++--- src/backend/access/spgist/spgtextproc.c | 19 ++-- src/backend/access/spgist/spgutils.c | 2 +- src/backend/access/spgist/spgvacuum.c | 6 +- src/backend/access/spgist/spgxlog.c | 2 +- src/backend/access/tablesample/system.c | 2 +- src/backend/access/transam/multixact.c | 3 +- src/backend/access/transam/parallel.c | 7 +- src/backend/access/transam/timeline.c | 8 +- src/backend/access/transam/twophase.c | 10 +- src/backend/access/transam/xact.c | 2 +- src/backend/access/transam/xlog.c | 4 +- src/backend/access/transam/xlogfuncs.c | 2 +- src/backend/access/transam/xlogprefetcher.c | 2 +- src/backend/access/transam/xlogrecovery.c | 6 +- src/backend/access/transam/xlogutils.c | 2 +- src/backend/backup/basebackup.c | 6 +- src/backend/backup/basebackup_copy.c | 2 +- src/backend/backup/basebackup_gzip.c | 2 +- src/backend/backup/basebackup_incremental.c | 6 +- src/backend/backup/basebackup_lz4.c | 2 +- src/backend/backup/basebackup_progress.c | 2 +- src/backend/backup/basebackup_server.c | 2 +- src/backend/backup/basebackup_target.c | 4 +- src/backend/backup/basebackup_throttle.c | 2 +- src/backend/backup/basebackup_zstd.c | 2 +- src/backend/backup/walsummary.c | 2 +- src/backend/bootstrap/bootstrap.c | 6 +- src/backend/catalog/dependency.c | 8 +- src/backend/catalog/heap.c | 8 +- src/backend/catalog/index.c | 8 +- src/backend/catalog/namespace.c | 4 +- src/backend/catalog/objectaddress.c | 4 +- src/backend/catalog/pg_constraint.c | 2 +- src/backend/catalog/pg_depend.c | 2 +- src/backend/catalog/pg_enum.c | 6 +- src/backend/catalog/pg_publication.c | 6 +- src/backend/catalog/pg_shdepend.c | 4 +- src/backend/catalog/pg_subscription.c | 4 +- src/backend/catalog/storage.c | 10 +- src/backend/commands/analyze.c | 6 +- src/backend/commands/cluster.c | 4 +- src/backend/commands/copy.c | 2 +- src/backend/commands/copyfrom.c | 4 +- src/backend/commands/copyto.c | 4 +- src/backend/commands/createas.c | 2 +- src/backend/commands/dbcommands.c | 2 +- src/backend/commands/event_trigger.c | 24 ++--- src/backend/commands/explain.c | 2 +- src/backend/commands/explain_dr.c | 2 +- src/backend/commands/explain_state.c | 7 +- src/backend/commands/extension.c | 4 +- src/backend/commands/functioncmds.c | 2 +- src/backend/commands/matview.c | 4 +- src/backend/commands/opclasscmds.c | 12 +-- src/backend/commands/policy.c | 6 +- src/backend/commands/publicationcmds.c | 6 +- src/backend/commands/seclabel.c | 2 +- src/backend/commands/subscriptioncmds.c | 4 +- src/backend/commands/tablecmds.c | 36 +++---- src/backend/commands/trigger.c | 8 +- src/backend/commands/tsearchcmds.c | 8 +- src/backend/commands/typecmds.c | 4 +- src/backend/commands/user.c | 4 +- src/backend/commands/vacuumparallel.c | 6 +- src/backend/executor/execExpr.c | 94 +++++++++---------- src/backend/executor/execGrouping.c | 2 +- src/backend/executor/execIndexing.c | 4 +- src/backend/executor/execMain.c | 21 ++--- src/backend/executor/execParallel.c | 2 +- src/backend/executor/execReplication.c | 8 +- src/backend/executor/execTuples.c | 4 +- src/backend/executor/functions.c | 4 +- src/backend/executor/nodeAgg.c | 42 ++++----- src/backend/executor/nodeAppend.c | 2 +- src/backend/executor/nodeFunctionscan.c | 2 +- src/backend/executor/nodeGatherMerge.c | 6 +- src/backend/executor/nodeHashjoin.c | 5 +- src/backend/executor/nodeIndexonlyscan.c | 3 +- src/backend/executor/nodeIndexscan.c | 8 +- src/backend/executor/nodeMemoize.c | 4 +- src/backend/executor/nodeMergeAppend.c | 6 +- src/backend/executor/nodeModifyTable.c | 13 +-- src/backend/executor/nodeProjectSet.c | 6 +- src/backend/executor/nodeSamplescan.c | 2 +- src/backend/executor/nodeTableFuncscan.c | 4 +- src/backend/executor/nodeTidrangescan.c | 2 +- src/backend/executor/nodeTidscan.c | 2 +- src/backend/executor/nodeWindowAgg.c | 12 +-- src/backend/executor/spi.c | 21 ++--- src/backend/executor/tqueue.c | 4 +- src/backend/executor/tstoreReceiver.c | 2 +- src/backend/foreign/foreign.c | 10 +- src/backend/jit/llvm/llvmjit.c | 6 +- src/backend/jit/llvm/llvmjit_deform.c | 12 +-- src/backend/jit/llvm/llvmjit_expr.c | 8 +- src/backend/lib/bipartite_match.c | 2 +- src/backend/lib/dshash.c | 4 +- src/backend/lib/integerset.c | 2 +- src/backend/lib/pairingheap.c | 2 +- src/backend/lib/rbtree.c | 2 +- src/backend/libpq/auth-oauth.c | 8 +- src/backend/libpq/auth-scram.c | 2 +- src/backend/libpq/hba.c | 10 +- src/backend/libpq/pqcomm.c | 2 +- src/backend/nodes/nodeFuncs.c | 2 +- src/backend/nodes/queryjumblefuncs.c | 2 +- src/backend/nodes/tidbitmap.c | 4 +- src/backend/optimizer/geqo/geqo_erx.c | 2 +- src/backend/optimizer/geqo/geqo_eval.c | 2 +- src/backend/optimizer/geqo/geqo_pmx.c | 8 +- src/backend/optimizer/geqo/geqo_pool.c | 10 +- .../optimizer/geqo/geqo_recombination.c | 2 +- src/backend/optimizer/path/clausesel.c | 2 +- src/backend/optimizer/path/costsize.c | 4 +- src/backend/optimizer/path/indxpath.c | 7 +- src/backend/optimizer/path/joinrels.c | 3 +- src/backend/optimizer/plan/analyzejoins.c | 3 +- src/backend/optimizer/plan/createplan.c | 34 +++---- src/backend/optimizer/plan/initsplan.c | 6 +- src/backend/optimizer/plan/planagg.c | 2 +- src/backend/optimizer/plan/planner.c | 6 +- src/backend/optimizer/plan/setrefs.c | 6 +- src/backend/optimizer/prep/prepjointree.c | 7 +- src/backend/optimizer/prep/prepunion.c | 2 +- src/backend/optimizer/util/appendinfo.c | 3 +- src/backend/optimizer/util/clauses.c | 6 +- src/backend/optimizer/util/extendplan.c | 18 ++-- src/backend/optimizer/util/plancat.c | 39 ++++---- src/backend/optimizer/util/predtest.c | 4 +- src/backend/optimizer/util/relnode.c | 15 ++- src/backend/optimizer/util/tlist.c | 12 +-- src/backend/parser/analyze.c | 5 +- src/backend/parser/gram.y | 92 +++++++++--------- src/backend/parser/parse_clause.c | 4 +- src/backend/parser/parse_expr.c | 4 +- src/backend/parser/parse_node.c | 2 +- src/backend/parser/parse_param.c | 4 +- src/backend/parser/parse_relation.c | 10 +- src/backend/parser/parse_type.c | 2 +- src/backend/partitioning/partbounds.c | 66 ++++++------- src/backend/partitioning/partdesc.c | 2 +- src/backend/postmaster/autovacuum.c | 6 +- src/backend/postmaster/bgworker.c | 2 +- src/backend/postmaster/checkpointer.c | 2 +- src/backend/postmaster/launch_backend.c | 2 +- src/backend/postmaster/pgarch.c | 4 +- src/backend/postmaster/postmaster.c | 2 +- src/backend/postmaster/syslogger.c | 2 +- src/backend/postmaster/walsummarizer.c | 3 +- .../libpqwalreceiver/libpqwalreceiver.c | 4 +- .../replication/logical/applyparallelworker.c | 2 +- src/backend/replication/logical/launcher.c | 2 +- src/backend/replication/logical/logical.c | 2 +- .../replication/logical/logicalfuncs.c | 2 +- src/backend/replication/logical/proto.c | 8 +- src/backend/replication/logical/relation.c | 8 +- .../replication/logical/reorderbuffer.c | 17 ++-- src/backend/replication/logical/slotsync.c | 2 +- src/backend/replication/logical/snapbuild.c | 5 +- src/backend/replication/logical/syncutils.c | 2 +- src/backend/replication/logical/worker.c | 6 +- src/backend/replication/pgoutput/pgoutput.c | 4 +- src/backend/replication/syncrep.c | 9 +- src/backend/replication/walreceiver.c | 4 +- src/backend/replication/walsender.c | 2 +- src/backend/rewrite/rewriteHandler.c | 2 +- src/backend/rewrite/rewriteManip.c | 6 +- src/backend/snowball/dict_snowball.c | 4 +- src/backend/statistics/dependencies.c | 26 +++-- src/backend/statistics/extended_stats.c | 15 ++- src/backend/statistics/mcv.c | 24 ++--- src/backend/storage/file/buffile.c | 10 +- src/backend/storage/ipc/procarray.c | 8 +- src/backend/storage/ipc/shm_mq.c | 2 +- src/backend/storage/ipc/shmem.c | 6 +- src/backend/storage/lmgr/lock.c | 16 ++-- src/backend/storage/lmgr/predicate.c | 8 +- src/backend/storage/smgr/bulk_write.c | 2 +- src/backend/storage/smgr/md.c | 2 +- src/backend/storage/smgr/smgr.c | 2 +- src/backend/storage/sync/sync.c | 2 +- src/backend/tcop/pquery.c | 2 +- src/backend/tsearch/dict.c | 2 +- src/backend/tsearch/dict_ispell.c | 2 +- src/backend/tsearch/dict_simple.c | 6 +- src/backend/tsearch/dict_synonym.c | 8 +- src/backend/tsearch/dict_thesaurus.c | 26 ++--- src/backend/tsearch/spell.c | 22 ++--- src/backend/tsearch/to_tsany.c | 14 +-- src/backend/tsearch/ts_parse.c | 2 +- src/backend/tsearch/ts_selfuncs.c | 2 +- src/backend/tsearch/ts_typanalyze.c | 6 +- src/backend/tsearch/ts_utils.c | 4 +- src/backend/tsearch/wparser.c | 16 ++-- src/backend/tsearch/wparser_def.c | 12 +-- src/backend/utils/activity/pgstat_relation.c | 2 +- src/backend/utils/activity/wait_event.c | 2 +- src/backend/utils/adt/acl.c | 6 +- src/backend/utils/adt/array_selfuncs.c | 8 +- src/backend/utils/adt/array_typanalyze.c | 7 +- src/backend/utils/adt/array_userfuncs.c | 12 +-- src/backend/utils/adt/arrayfuncs.c | 14 +-- src/backend/utils/adt/arraysubs.c | 2 +- src/backend/utils/adt/date.c | 24 ++--- src/backend/utils/adt/datetime.c | 10 +- src/backend/utils/adt/formatting.c | 2 +- src/backend/utils/adt/geo_ops.c | 94 +++++++++---------- src/backend/utils/adt/geo_spgist.c | 40 ++++---- src/backend/utils/adt/int.c | 2 +- src/backend/utils/adt/int8.c | 2 +- src/backend/utils/adt/json.c | 6 +- src/backend/utils/adt/jsonb_gin.c | 19 ++-- src/backend/utils/adt/jsonb_util.c | 10 +- src/backend/utils/adt/jsonfuncs.c | 64 ++++++------- src/backend/utils/adt/jsonpath_exec.c | 27 +++--- src/backend/utils/adt/jsonpath_gram.y | 4 +- src/backend/utils/adt/lockfuncs.c | 2 +- src/backend/utils/adt/mac.c | 14 +-- src/backend/utils/adt/mac8.c | 18 ++-- src/backend/utils/adt/mcxtfuncs.c | 2 +- src/backend/utils/adt/misc.c | 2 +- src/backend/utils/adt/multirangetypes.c | 8 +- .../utils/adt/multirangetypes_selfuncs.c | 4 +- src/backend/utils/adt/multixactfuncs.c | 2 +- src/backend/utils/adt/network.c | 24 ++--- src/backend/utils/adt/network_gist.c | 10 +- src/backend/utils/adt/network_spgist.c | 6 +- src/backend/utils/adt/numeric.c | 13 ++- src/backend/utils/adt/orderedsetaggs.c | 4 +- src/backend/utils/adt/pg_locale_libc.c | 6 +- src/backend/utils/adt/pg_ndistinct.c | 2 +- src/backend/utils/adt/rangetypes.c | 2 +- src/backend/utils/adt/rangetypes_gist.c | 15 ++- src/backend/utils/adt/rangetypes_selfuncs.c | 4 +- src/backend/utils/adt/rangetypes_spgist.c | 18 ++-- src/backend/utils/adt/rangetypes_typanalyze.c | 8 +- src/backend/utils/adt/regexp.c | 20 ++-- src/backend/utils/adt/rowtypes.c | 24 ++--- src/backend/utils/adt/ruleutils.c | 4 +- src/backend/utils/adt/selfuncs.c | 4 +- src/backend/utils/adt/skipsupport.c | 2 +- src/backend/utils/adt/tid.c | 6 +- src/backend/utils/adt/timestamp.c | 46 +++++---- src/backend/utils/adt/tsginidx.c | 10 +- src/backend/utils/adt/tsgistidx.c | 10 +- src/backend/utils/adt/tsquery.c | 12 +-- src/backend/utils/adt/tsquery_cleanup.c | 2 +- src/backend/utils/adt/tsquery_gist.c | 4 +- src/backend/utils/adt/tsquery_op.c | 14 +-- src/backend/utils/adt/tsquery_util.c | 18 ++-- src/backend/utils/adt/tsrank.c | 13 ++- src/backend/utils/adt/tsvector.c | 4 +- src/backend/utils/adt/tsvector_op.c | 10 +- src/backend/utils/adt/tsvector_parser.c | 6 +- src/backend/utils/adt/uuid.c | 4 +- src/backend/utils/adt/varlena.c | 2 +- src/backend/utils/adt/xml.c | 6 +- src/backend/utils/cache/catcache.c | 4 +- src/backend/utils/cache/evtcache.c | 2 +- src/backend/utils/cache/inval.c | 2 +- src/backend/utils/cache/lsyscache.c | 6 +- src/backend/utils/cache/partcache.c | 24 ++--- src/backend/utils/cache/plancache.c | 15 ++- src/backend/utils/cache/relcache.c | 30 +++--- src/backend/utils/cache/typcache.c | 2 +- src/backend/utils/error/elog.c | 2 +- src/backend/utils/fmgr/funcapi.c | 2 +- src/backend/utils/init/postinit.c | 2 +- src/backend/utils/mb/mbutils.c | 4 +- src/backend/utils/misc/conffiles.c | 2 +- src/backend/utils/misc/guc-file.l | 4 +- src/backend/utils/misc/guc.c | 4 +- src/backend/utils/misc/injection_point.c | 2 +- src/backend/utils/misc/queryenvironment.c | 2 +- src/backend/utils/misc/tzparser.c | 2 +- src/backend/utils/mmgr/dsa.c | 4 +- src/backend/utils/sort/logtape.c | 6 +- src/backend/utils/sort/sharedtuplestore.c | 4 +- src/backend/utils/sort/tuplesort.c | 2 +- src/backend/utils/sort/tuplesortvariants.c | 12 +-- src/backend/utils/sort/tuplestore.c | 2 +- src/backend/utils/time/snapmgr.c | 2 +- 333 files changed, 1358 insertions(+), 1465 deletions(-) diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index cb3331921c..26cb75058d 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -318,7 +318,7 @@ initialize_brin_insertstate(Relation idxRel, IndexInfo *indexInfo) MemoryContext oldcxt; oldcxt = MemoryContextSwitchTo(indexInfo->ii_Context); - bistate = palloc0(sizeof(BrinInsertState)); + bistate = palloc0_object(BrinInsertState); bistate->bis_desc = brin_build_desc(idxRel); bistate->bis_rmAccess = brinRevmapInitialize(idxRel, &bistate->bis_pages_per_range); @@ -1185,7 +1185,7 @@ brinbuild(Relation heap, Relation index, IndexInfo *indexInfo) { SortCoordinate coordinate; - coordinate = (SortCoordinate) palloc0(sizeof(SortCoordinateData)); + coordinate = palloc0_object(SortCoordinateData); coordinate->isWorker = false; coordinate->nParticipants = state->bs_leader->nparticipanttuplesorts; @@ -2384,7 +2384,7 @@ _brin_begin_parallel(BrinBuildState *buildstate, Relation heap, Relation index, Size estsort; BrinShared *brinshared; Sharedsort *sharedsort; - BrinLeader *brinleader = (BrinLeader *) palloc0(sizeof(BrinLeader)); + BrinLeader *brinleader = palloc0_object(BrinLeader); WalUsage *walusage; BufferUsage *bufferusage; bool leaderparticipates = true; @@ -2828,7 +2828,7 @@ _brin_parallel_scan_and_build(BrinBuildState *state, IndexInfo *indexInfo; /* Initialize local tuplesort coordination state */ - coordinate = palloc0(sizeof(SortCoordinateData)); + coordinate = palloc0_object(SortCoordinateData); coordinate->isWorker = true; coordinate->nParticipants = -1; coordinate->sharedsort = sharedsort; diff --git a/src/backend/access/brin/brin_minmax_multi.c b/src/backend/access/brin/brin_minmax_multi.c index f8a11444d6..0298a9da8b 100644 --- a/src/backend/access/brin/brin_minmax_multi.c +++ b/src/backend/access/brin/brin_minmax_multi.c @@ -1340,7 +1340,7 @@ build_distances(FmgrInfo *distanceFn, Oid colloid, return NULL; ndistances = (neranges - 1); - distances = (DistanceValue *) palloc0(sizeof(DistanceValue) * ndistances); + distances = palloc0_array(DistanceValue, ndistances); /* * Walk through the ranges once and compute the distance between the @@ -1504,7 +1504,7 @@ reduce_expanded_ranges(ExpandedRange *eranges, int neranges, /* allocate space for the boundary values */ nvalues = 0; - values = (Datum *) palloc(sizeof(Datum) * max_values); + values = palloc_array(Datum, max_values); /* add the global min/max values, from the first/last range */ values[nvalues++] = eranges[0].minval; diff --git a/src/backend/access/brin/brin_revmap.c b/src/backend/access/brin/brin_revmap.c index 4e380ecc71..644f9889a8 100644 --- a/src/backend/access/brin/brin_revmap.c +++ b/src/backend/access/brin/brin_revmap.c @@ -79,7 +79,7 @@ brinRevmapInitialize(Relation idxrel, BlockNumber *pagesPerRange) page = BufferGetPage(meta); metadata = (BrinMetaPageData *) PageGetContents(page); - revmap = palloc(sizeof(BrinRevmap)); + revmap = palloc_object(BrinRevmap); revmap->rm_irel = idxrel; revmap->rm_pagesPerRange = metadata->pagesPerRange; revmap->rm_lastRevmapPage = metadata->lastRevmapPage; diff --git a/src/backend/access/brin/brin_tuple.c b/src/backend/access/brin/brin_tuple.c index 861f397e6d..43850ce8f4 100644 --- a/src/backend/access/brin/brin_tuple.c +++ b/src/backend/access/brin/brin_tuple.c @@ -119,13 +119,12 @@ brin_form_tuple(BrinDesc *brdesc, BlockNumber blkno, BrinMemTuple *tuple, Assert(brdesc->bd_totalstored > 0); - values = (Datum *) palloc(sizeof(Datum) * brdesc->bd_totalstored); - nulls = (bool *) palloc0(sizeof(bool) * brdesc->bd_totalstored); - phony_nullbitmap = (bits8 *) - palloc(sizeof(bits8) * BITMAPLEN(brdesc->bd_totalstored)); + values = palloc_array(Datum, brdesc->bd_totalstored); + nulls = palloc0_array(bool, brdesc->bd_totalstored); + phony_nullbitmap = palloc_array(bits8, BITMAPLEN(brdesc->bd_totalstored)); #ifdef TOAST_INDEX_HACK - untoasted_values = (Datum *) palloc(sizeof(Datum) * brdesc->bd_totalstored); + untoasted_values = palloc_array(Datum, brdesc->bd_totalstored); #endif /* @@ -488,9 +487,9 @@ brin_new_memtuple(BrinDesc *brdesc) sizeof(BrinValues) * brdesc->bd_tupdesc->natts); dtup = palloc0(basesize + sizeof(Datum) * brdesc->bd_totalstored); - dtup->bt_values = palloc(sizeof(Datum) * brdesc->bd_totalstored); - dtup->bt_allnulls = palloc(sizeof(bool) * brdesc->bd_tupdesc->natts); - dtup->bt_hasnulls = palloc(sizeof(bool) * brdesc->bd_tupdesc->natts); + dtup->bt_values = palloc_array(Datum, brdesc->bd_totalstored); + dtup->bt_allnulls = palloc_array(bool, brdesc->bd_tupdesc->natts); + dtup->bt_hasnulls = palloc_array(bool, brdesc->bd_tupdesc->natts); dtup->bt_empty_range = true; diff --git a/src/backend/access/common/attmap.c b/src/backend/access/common/attmap.c index 4901ebecef..4cfa9ee78f 100644 --- a/src/backend/access/common/attmap.c +++ b/src/backend/access/common/attmap.c @@ -41,9 +41,9 @@ make_attrmap(int maplen) { AttrMap *res; - res = (AttrMap *) palloc0(sizeof(AttrMap)); + res = palloc0_object(AttrMap); res->maplen = maplen; - res->attnums = (AttrNumber *) palloc0(sizeof(AttrNumber) * maplen); + res->attnums = palloc0_array(AttrNumber, maplen); return res; } diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c index 1967b04702..b7820d692e 100644 --- a/src/backend/access/common/heaptuple.c +++ b/src/backend/access/common/heaptuple.c @@ -1230,8 +1230,8 @@ heap_modify_tuple(HeapTuple tuple, * O(N^2) if there are many non-replaced columns, so it seems better to * err on the side of linear cost. */ - values = (Datum *) palloc(numberOfAttributes * sizeof(Datum)); - isnull = (bool *) palloc(numberOfAttributes * sizeof(bool)); + values = palloc_array(Datum, numberOfAttributes); + isnull = palloc_array(bool, numberOfAttributes); heap_deform_tuple(tuple, tupleDesc, values, isnull); @@ -1292,8 +1292,8 @@ heap_modify_tuple_by_cols(HeapTuple tuple, * allocate and fill values and isnull arrays from the tuple, then replace * selected columns from the input arrays. */ - values = (Datum *) palloc(numberOfAttributes * sizeof(Datum)); - isnull = (bool *) palloc(numberOfAttributes * sizeof(bool)); + values = palloc_array(Datum, numberOfAttributes); + isnull = palloc_array(bool, numberOfAttributes); heap_deform_tuple(tuple, tupleDesc, values, isnull); diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c index 025fe75916..47b2b2d233 100644 --- a/src/backend/access/common/printtup.c +++ b/src/backend/access/common/printtup.c @@ -71,7 +71,7 @@ typedef struct DestReceiver * printtup_create_DR(CommandDest dest) { - DR_printtup *self = (DR_printtup *) palloc0(sizeof(DR_printtup)); + DR_printtup *self = palloc0_object(DR_printtup); self->pub.receiveSlot = printtup; /* might get changed later */ self->pub.rStartup = printtup_startup; diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index 9e288dfecb..31926d8a36 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -776,7 +776,7 @@ register_reloptions_validator(local_relopts *relopts, relopts_validator validato static void add_local_reloption(local_relopts *relopts, relopt_gen *newoption, int offset) { - local_relopt *opt = palloc(sizeof(*opt)); + local_relopt *opt = palloc_object(local_relopt); Assert(offset < relopts->relopt_struct_size); @@ -1570,7 +1570,7 @@ static relopt_value * parseLocalRelOptions(local_relopts *relopts, Datum options, bool validate) { int nopts = list_length(relopts->options); - relopt_value *values = palloc(sizeof(*values) * nopts); + relopt_value *values = palloc_array(relopt_value, nopts); ListCell *lc; int i = 0; @@ -1991,7 +1991,7 @@ void * build_local_reloptions(local_relopts *relopts, Datum options, bool validate) { int noptions = list_length(relopts->options); - relopt_parse_elt *elems = palloc(sizeof(*elems) * noptions); + relopt_parse_elt *elems = palloc_array(relopt_parse_elt, noptions); relopt_value *vals; void *opts; int i = 0; diff --git a/src/backend/access/common/tidstore.c b/src/backend/access/common/tidstore.c index fb807d9fe5..6fae41e7b6 100644 --- a/src/backend/access/common/tidstore.c +++ b/src/backend/access/common/tidstore.c @@ -166,7 +166,7 @@ TidStoreCreateLocal(size_t max_bytes, bool insert_only) size_t minContextSize = ALLOCSET_DEFAULT_MINSIZE; size_t maxBlockSize = ALLOCSET_DEFAULT_MAXSIZE; - ts = palloc0(sizeof(TidStore)); + ts = palloc0_object(TidStore); /* choose the maxBlockSize to be no larger than 1/16 of max_bytes */ while (16 * maxBlockSize > max_bytes) @@ -212,7 +212,7 @@ TidStoreCreateShared(size_t max_bytes, int tranche_id) size_t dsa_init_size = DSA_DEFAULT_INIT_SEGMENT_SIZE; size_t dsa_max_size = DSA_MAX_SEGMENT_SIZE; - ts = palloc0(sizeof(TidStore)); + ts = palloc0_object(TidStore); /* * Choose the initial and maximum DSA segment sizes to be no longer than @@ -250,7 +250,7 @@ TidStoreAttach(dsa_handle area_handle, dsa_pointer handle) Assert(DsaPointerIsValid(handle)); /* create per-backend state */ - ts = palloc0(sizeof(TidStore)); + ts = palloc0_object(TidStore); area = dsa_attach(area_handle); @@ -472,7 +472,7 @@ TidStoreBeginIterate(TidStore *ts) { TidStoreIter *iter; - iter = palloc0(sizeof(TidStoreIter)); + iter = palloc0_object(TidStoreIter); iter->ts = ts; if (TidStoreIsShared(ts)) diff --git a/src/backend/access/common/toast_internals.c b/src/backend/access/common/toast_internals.c index 63b848473f..d06af82de1 100644 --- a/src/backend/access/common/toast_internals.c +++ b/src/backend/access/common/toast_internals.c @@ -568,7 +568,7 @@ toast_open_indexes(Relation toastrel, *num_indexes = list_length(indexlist); /* Open all the index relations */ - *toastidxs = (Relation *) palloc(*num_indexes * sizeof(Relation)); + *toastidxs = palloc_array(Relation, *num_indexes); foreach(lc, indexlist) (*toastidxs)[i++] = index_open(lfirst_oid(lc), lock); diff --git a/src/backend/access/common/tupconvert.c b/src/backend/access/common/tupconvert.c index 1df0c2d2f9..99c197e361 100644 --- a/src/backend/access/common/tupconvert.c +++ b/src/backend/access/common/tupconvert.c @@ -75,17 +75,17 @@ convert_tuples_by_position(TupleDesc indesc, } /* Prepare the map structure */ - map = (TupleConversionMap *) palloc(sizeof(TupleConversionMap)); + map = palloc_object(TupleConversionMap); map->indesc = indesc; map->outdesc = outdesc; map->attrMap = attrMap; /* preallocate workspace for Datum arrays */ n = outdesc->natts + 1; /* +1 for NULL */ - map->outvalues = (Datum *) palloc(n * sizeof(Datum)); - map->outisnull = (bool *) palloc(n * sizeof(bool)); + map->outvalues = palloc_array(Datum, n); + map->outisnull = palloc_array(bool, n); n = indesc->natts + 1; /* +1 for NULL */ - map->invalues = (Datum *) palloc(n * sizeof(Datum)); - map->inisnull = (bool *) palloc(n * sizeof(bool)); + map->invalues = palloc_array(Datum, n); + map->inisnull = palloc_array(bool, n); map->invalues[0] = (Datum) 0; /* set up the NULL entry */ map->inisnull[0] = true; @@ -132,16 +132,16 @@ convert_tuples_by_name_attrmap(TupleDesc indesc, Assert(attrMap != NULL); /* Prepare the map structure */ - map = (TupleConversionMap *) palloc(sizeof(TupleConversionMap)); + map = palloc_object(TupleConversionMap); map->indesc = indesc; map->outdesc = outdesc; map->attrMap = attrMap; /* preallocate workspace for Datum arrays */ - map->outvalues = (Datum *) palloc(n * sizeof(Datum)); - map->outisnull = (bool *) palloc(n * sizeof(bool)); + map->outvalues = palloc_array(Datum, n); + map->outisnull = palloc_array(bool, n); n = indesc->natts + 1; /* +1 for NULL */ - map->invalues = (Datum *) palloc(n * sizeof(Datum)); - map->inisnull = (bool *) palloc(n * sizeof(bool)); + map->invalues = palloc_array(Datum, n); + map->inisnull = palloc_array(bool, n); map->invalues[0] = (Datum) 0; /* set up the NULL entry */ map->inisnull[0] = true; diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c index d715c345dd..bcd1ddcc68 100644 --- a/src/backend/access/common/tupdesc.c +++ b/src/backend/access/common/tupdesc.c @@ -361,7 +361,7 @@ CreateTupleDescCopyConstr(TupleDesc tupdesc) /* Copy the TupleConstr data structure, if any */ if (constr) { - TupleConstr *cpy = (TupleConstr *) palloc0(sizeof(TupleConstr)); + TupleConstr *cpy = palloc0_object(TupleConstr); cpy->has_not_null = constr->has_not_null; cpy->has_generated_stored = constr->has_generated_stored; diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c index 644d484ea5..47f881ae59 100644 --- a/src/backend/access/gin/ginbtree.c +++ b/src/backend/access/gin/ginbtree.c @@ -85,7 +85,7 @@ ginFindLeafPage(GinBtree btree, bool searchMode, { GinBtreeStack *stack; - stack = (GinBtreeStack *) palloc(sizeof(GinBtreeStack)); + stack = palloc_object(GinBtreeStack); stack->blkno = btree->rootBlkno; stack->buffer = ReadBuffer(btree->index, btree->rootBlkno); stack->parent = NULL; @@ -152,7 +152,7 @@ ginFindLeafPage(GinBtree btree, bool searchMode, } else { - GinBtreeStack *ptr = (GinBtreeStack *) palloc(sizeof(GinBtreeStack)); + GinBtreeStack *ptr = palloc_object(GinBtreeStack); ptr->parent = stack; stack = ptr; @@ -246,7 +246,7 @@ ginFindParents(GinBtree btree, GinBtreeStack *stack) blkno = root->blkno; buffer = root->buffer; - ptr = (GinBtreeStack *) palloc(sizeof(GinBtreeStack)); + ptr = palloc_object(GinBtreeStack); for (;;) { diff --git a/src/backend/access/gin/ginbulk.c b/src/backend/access/gin/ginbulk.c index 302cb2092a..f73ee7b1fa 100644 --- a/src/backend/access/gin/ginbulk.c +++ b/src/backend/access/gin/ginbulk.c @@ -93,7 +93,7 @@ ginAllocEntryAccumulator(void *arg) */ if (accum->entryallocator == NULL || accum->eas_used >= DEF_NENTRY) { - accum->entryallocator = palloc(sizeof(GinEntryAccumulator) * DEF_NENTRY); + accum->entryallocator = palloc_array(GinEntryAccumulator, DEF_NENTRY); accum->allocatedMemory += GetMemoryChunkSpace(accum->entryallocator); accum->eas_used = 0; } @@ -177,8 +177,7 @@ ginInsertBAEntry(BuildAccumulator *accum, ea->maxcount = DEF_NPTR; ea->count = 1; ea->shouldSort = false; - ea->list = - (ItemPointerData *) palloc(sizeof(ItemPointerData) * DEF_NPTR); + ea->list = palloc_array(ItemPointerData, DEF_NPTR); ea->list[0] = *heapptr; accum->allocatedMemory += GetMemoryChunkSpace(ea->list); } diff --git a/src/backend/access/gin/gindatapage.c b/src/backend/access/gin/gindatapage.c index 8d9e3727c5..0140bd4904 100644 --- a/src/backend/access/gin/gindatapage.c +++ b/src/backend/access/gin/gindatapage.c @@ -1332,7 +1332,7 @@ dataSplitPageInternal(GinBtree btree, Buffer origbuf, static void * dataPrepareDownlink(GinBtree btree, Buffer lbuf) { - PostingItem *pitem = palloc(sizeof(PostingItem)); + PostingItem *pitem = palloc_object(PostingItem); Page lpage = BufferGetPage(lbuf); PostingItemSetBlockNumber(pitem, BufferGetBlockNumber(lbuf)); @@ -1374,7 +1374,7 @@ disassembleLeaf(Page page) char *segbegin; char *segend; - leaf = palloc0(sizeof(disassembledLeaf)); + leaf = palloc0_object(disassembledLeaf); dlist_init(&leaf->segments); if (GinPageIsCompressed(page)) @@ -1387,7 +1387,7 @@ disassembleLeaf(Page page) segend = segbegin + GinDataLeafPageGetPostingListSize(page); while ((char *) seg < segend) { - leafSegmentInfo *seginfo = palloc(sizeof(leafSegmentInfo)); + leafSegmentInfo *seginfo = palloc_object(leafSegmentInfo); seginfo->action = GIN_SEGMENT_UNMODIFIED; seginfo->seg = seg; @@ -1414,7 +1414,7 @@ disassembleLeaf(Page page) if (nuncompressed > 0) { - seginfo = palloc(sizeof(leafSegmentInfo)); + seginfo = palloc_object(leafSegmentInfo); seginfo->action = GIN_SEGMENT_REPLACE; seginfo->seg = NULL; @@ -1455,7 +1455,7 @@ addItemsToLeaf(disassembledLeaf *leaf, ItemPointer newItems, int nNewItems) */ if (dlist_is_empty(&leaf->segments)) { - newseg = palloc(sizeof(leafSegmentInfo)); + newseg = palloc_object(leafSegmentInfo); newseg->seg = NULL; newseg->items = newItems; newseg->nitems = nNewItems; @@ -1512,7 +1512,7 @@ addItemsToLeaf(disassembledLeaf *leaf, ItemPointer newItems, int nNewItems) cur->seg != NULL && SizeOfGinPostingList(cur->seg) >= GinPostingListSegmentTargetSize) { - newseg = palloc(sizeof(leafSegmentInfo)); + newseg = palloc_object(leafSegmentInfo); newseg->seg = NULL; newseg->items = nextnew; newseg->nitems = nthis; @@ -1629,7 +1629,7 @@ leafRepackItems(disassembledLeaf *leaf, ItemPointer remaining) if (seginfo->action != GIN_SEGMENT_INSERT) seginfo->action = GIN_SEGMENT_REPLACE; - nextseg = palloc(sizeof(leafSegmentInfo)); + nextseg = palloc_object(leafSegmentInfo); nextseg->action = GIN_SEGMENT_INSERT; nextseg->seg = NULL; nextseg->items = &seginfo->items[npacked]; diff --git a/src/backend/access/gin/ginentrypage.c b/src/backend/access/gin/ginentrypage.c index 94f49d72a9..23a41ce948 100644 --- a/src/backend/access/gin/ginentrypage.c +++ b/src/backend/access/gin/ginentrypage.c @@ -183,7 +183,7 @@ ginReadTuple(GinState *ginstate, OffsetNumber attnum, IndexTuple itup, } else { - ipd = (ItemPointer) palloc(sizeof(ItemPointerData) * nipd); + ipd = palloc_array(ItemPointerData, nipd); memcpy(ipd, ptr, sizeof(ItemPointerData) * nipd); } *nitems = nipd; @@ -708,7 +708,7 @@ entryPrepareDownlink(GinBtree btree, Buffer lbuf) itup = getRightMostTuple(lpage); - insertData = palloc(sizeof(GinBtreeEntryInsertData)); + insertData = palloc_object(GinBtreeEntryInsertData); insertData->entry = GinFormInteriorTuple(itup, lpage, lblkno); insertData->isDelete = false; diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c index 0d4108d05a..b3e2e9d5f6 100644 --- a/src/backend/access/gin/ginget.c +++ b/src/backend/access/gin/ginget.c @@ -552,7 +552,7 @@ startScanKey(GinState *ginstate, GinScanOpaque so, GinScanKey key) { MemoryContextSwitchTo(so->tempCtx); - entryIndexes = (int *) palloc(sizeof(int) * key->nentries); + entryIndexes = palloc_array(int, key->nentries); for (i = 0; i < key->nentries; i++) entryIndexes[i] = i; qsort_arg(entryIndexes, key->nentries, sizeof(int), @@ -1873,7 +1873,7 @@ scanPendingInsert(IndexScanDesc scan, TIDBitmap *tbm, int64 *ntids) LockBuffer(pos.pendingBuffer, GIN_SHARE); pos.firstOffset = FirstOffsetNumber; UnlockReleaseBuffer(metabuffer); - pos.hasMatchKey = palloc(sizeof(bool) * so->nkeys); + pos.hasMatchKey = palloc_array(bool, so->nkeys); /* * loop for each heap row. scanGetCandidate returns full row or row's diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c index f87c60a230..df30dcc022 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -707,7 +707,7 @@ ginbuild(Relation heap, Relation index, IndexInfo *indexInfo) { SortCoordinate coordinate; - coordinate = (SortCoordinate) palloc0(sizeof(SortCoordinateData)); + coordinate = palloc0_object(SortCoordinateData); coordinate->isWorker = false; coordinate->nParticipants = state->bs_leader->nparticipanttuplesorts; @@ -791,7 +791,7 @@ ginbuild(Relation heap, Relation index, IndexInfo *indexInfo) /* * Return statistics */ - result = (IndexBuildResult *) palloc(sizeof(IndexBuildResult)); + result = palloc_object(IndexBuildResult); result->heap_tuples = reltuples; result->index_tuples = buildstate.indtuples; @@ -867,7 +867,7 @@ gininsert(Relation index, Datum *values, bool *isnull, if (ginstate == NULL) { oldCtx = MemoryContextSwitchTo(indexInfo->ii_Context); - ginstate = (GinState *) palloc(sizeof(GinState)); + ginstate = palloc_object(GinState); initGinState(ginstate, index); indexInfo->ii_AmCache = ginstate; MemoryContextSwitchTo(oldCtx); @@ -934,7 +934,7 @@ _gin_begin_parallel(GinBuildState *buildstate, Relation heap, Relation index, Size estsort; GinBuildShared *ginshared; Sharedsort *sharedsort; - GinLeader *ginleader = (GinLeader *) palloc0(sizeof(GinLeader)); + GinLeader *ginleader = palloc0_object(GinLeader); WalUsage *walusage; BufferUsage *bufferusage; bool leaderparticipates = true; @@ -1259,7 +1259,7 @@ AssertCheckGinBuffer(GinBuffer *buffer) static GinBuffer * GinBufferInit(Relation index) { - GinBuffer *buffer = palloc0(sizeof(GinBuffer)); + GinBuffer *buffer = palloc0_object(GinBuffer); int i, nKeys; TupleDesc desc = RelationGetDescr(index); @@ -1273,7 +1273,7 @@ GinBufferInit(Relation index) nKeys = IndexRelationGetNumberOfKeyAttributes(index); - buffer->ssup = palloc0(sizeof(SortSupportData) * nKeys); + buffer->ssup = palloc0_array(SortSupportData, nKeys); /* * Lookup ordering operator for the index key data type, and initialize @@ -2030,7 +2030,7 @@ _gin_parallel_scan_and_build(GinBuildState *state, IndexInfo *indexInfo; /* Initialize local tuplesort coordination state */ - coordinate = palloc0(sizeof(SortCoordinateData)); + coordinate = palloc0_object(SortCoordinateData); coordinate->isWorker = true; coordinate->nParticipants = -1; coordinate->sharedsort = sharedsort; @@ -2279,7 +2279,7 @@ _gin_build_tuple(OffsetNumber attrnum, unsigned char category, while (ncompressed < nitems) { int cnt; - GinSegmentInfo *seginfo = palloc(sizeof(GinSegmentInfo)); + GinSegmentInfo *seginfo = palloc_object(GinSegmentInfo); seginfo->seg = ginCompressPostingList(&items[ncompressed], (nitems - ncompressed), diff --git a/src/backend/access/gin/ginscan.c b/src/backend/access/gin/ginscan.c index 2608169338..2ca635909f 100644 --- a/src/backend/access/gin/ginscan.c +++ b/src/backend/access/gin/ginscan.c @@ -33,7 +33,7 @@ ginbeginscan(Relation rel, int nkeys, int norderbys) scan = RelationGetIndexScan(rel, nkeys, norderbys); /* allocate private workspace */ - so = (GinScanOpaque) palloc(sizeof(GinScanOpaqueData)); + so = (GinScanOpaque) palloc_object(GinScanOpaqueData); so->keys = NULL; so->nkeys = 0; so->tempCtx = AllocSetContextCreate(CurrentMemoryContext, @@ -98,7 +98,7 @@ ginFillScanEntry(GinScanOpaque so, OffsetNumber attnum, } /* Nope, create a new entry */ - scanEntry = (GinScanEntry) palloc(sizeof(GinScanEntryData)); + scanEntry = palloc_object(GinScanEntryData); scanEntry->queryKey = queryKey; scanEntry->queryCategory = queryCategory; scanEntry->isPartialMatch = isPartialMatch; @@ -123,8 +123,7 @@ ginFillScanEntry(GinScanOpaque so, OffsetNumber attnum, if (so->totalentries >= so->allocentries) { so->allocentries *= 2; - so->entries = (GinScanEntry *) - repalloc(so->entries, so->allocentries * sizeof(GinScanEntry)); + so->entries = repalloc_array(so->entries, GinScanEntry, so->allocentries); } so->entries[so->totalentries++] = scanEntry; @@ -170,10 +169,8 @@ ginFillScanKey(GinScanOpaque so, OffsetNumber attnum, key->nuserentries = nQueryValues; /* Allocate one extra array slot for possible "hidden" entry */ - key->scanEntry = (GinScanEntry *) palloc(sizeof(GinScanEntry) * - (nQueryValues + 1)); - key->entryRes = (GinTernaryValue *) palloc0(sizeof(GinTernaryValue) * - (nQueryValues + 1)); + key->scanEntry = palloc_array(GinScanEntry, nQueryValues + 1); + key->entryRes = palloc0_array(GinTernaryValue, nQueryValues + 1); key->query = query; key->queryValues = queryValues; diff --git a/src/backend/access/gin/ginutil.c b/src/backend/access/gin/ginutil.c index 78f7b7a249..605f80aad3 100644 --- a/src/backend/access/gin/ginutil.c +++ b/src/backend/access/gin/ginutil.c @@ -500,9 +500,9 @@ ginExtractEntries(GinState *ginstate, OffsetNumber attnum, if (isNull) { *nentries = 1; - entries = (Datum *) palloc(sizeof(Datum)); + entries = palloc_object(Datum); entries[0] = (Datum) 0; - *categories = (GinNullCategory *) palloc(sizeof(GinNullCategory)); + *categories = palloc_object(GinNullCategory); (*categories)[0] = GIN_CAT_NULL_ITEM; return entries; } @@ -522,9 +522,9 @@ ginExtractEntries(GinState *ginstate, OffsetNumber attnum, if (entries == NULL || *nentries <= 0) { *nentries = 1; - entries = (Datum *) palloc(sizeof(Datum)); + entries = palloc_object(Datum); entries[0] = (Datum) 0; - *categories = (GinNullCategory *) palloc(sizeof(GinNullCategory)); + *categories = palloc_object(GinNullCategory); (*categories)[0] = GIN_CAT_EMPTY_ITEM; return entries; } @@ -548,7 +548,7 @@ ginExtractEntries(GinState *ginstate, OffsetNumber attnum, keyEntryData *keydata; cmpEntriesArg arg; - keydata = (keyEntryData *) palloc(*nentries * sizeof(keyEntryData)); + keydata = palloc_array(keyEntryData, *nentries); for (i = 0; i < *nentries; i++) { keydata[i].datum = entries[i]; diff --git a/src/backend/access/gin/ginvacuum.c b/src/backend/access/gin/ginvacuum.c index 2237efa50b..d7baf7c847 100644 --- a/src/backend/access/gin/ginvacuum.c +++ b/src/backend/access/gin/ginvacuum.c @@ -65,7 +65,7 @@ ginVacuumItemPointers(GinVacuumState *gvs, ItemPointerData *items, * First TID to be deleted: allocate memory to hold the * remaining items. */ - tmpitems = palloc(sizeof(ItemPointerData) * nitem); + tmpitems = palloc_array(ItemPointerData, nitem); memcpy(tmpitems, items, sizeof(ItemPointerData) * i); } } @@ -260,7 +260,7 @@ ginScanToDelete(GinVacuumState *gvs, BlockNumber blkno, bool isRoot, { if (!parent->child) { - me = (DataPageDeleteStack *) palloc0(sizeof(DataPageDeleteStack)); + me = palloc0_object(DataPageDeleteStack); me->parent = parent; parent->child = me; me->leftBuffer = InvalidBuffer; @@ -584,7 +584,7 @@ ginbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, if (stats == NULL) { /* Yes, so initialize stats to zeroes */ - stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); + stats = palloc0_object(IndexBulkDeleteResult); /* * and cleanup any pending inserts @@ -714,7 +714,7 @@ ginvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats) */ if (stats == NULL) { - stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); + stats = palloc0_object(IndexBulkDeleteResult); initGinState(&ginstate, index); ginInsertCleanup(&ginstate, !AmAutoVacuumWorkerProcess(), false, true, stats); diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index 3fb1a1285c..c26d8538f0 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -43,7 +43,7 @@ static void gistprunepage(Relation rel, Page page, Buffer buffer, #define ROTATEDIST(d) do { \ - SplitPageLayout *tmp = (SplitPageLayout *) palloc0(sizeof(SplitPageLayout)); \ + SplitPageLayout *tmp = palloc0_object(SplitPageLayout); \ tmp->block.blkno = InvalidBlockNumber; \ tmp->buffer = InvalidBuffer; \ tmp->next = (d); \ @@ -392,7 +392,7 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate, /* Prepare a vector of all the downlinks */ for (ptr = dist; ptr; ptr = ptr->next) ndownlinks++; - downlinks = palloc(sizeof(IndexTuple) * ndownlinks); + downlinks = palloc_array(IndexTuple, ndownlinks); for (i = 0, ptr = dist; ptr; ptr = ptr->next) downlinks[i++] = ptr->itup; @@ -410,7 +410,7 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate, /* Prepare split-info to be returned to caller */ for (ptr = dist; ptr; ptr = ptr->next) { - GISTPageSplitInfo *si = palloc(sizeof(GISTPageSplitInfo)); + GISTPageSplitInfo *si = palloc_object(GISTPageSplitInfo); si->buf = ptr->buffer; si->downlink = ptr->itup; @@ -823,7 +823,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace, xlocked = false; /* descend to the chosen child */ - item = (GISTInsertStack *) palloc0(sizeof(GISTInsertStack)); + item = palloc0_object(GISTInsertStack); item->blkno = childblkno; item->parent = stack; item->downlinkoffnum = downlinkoffnum; @@ -923,7 +923,7 @@ gistFindPath(Relation r, BlockNumber child, OffsetNumber *downlinkoffnum) *ptr; BlockNumber blkno; - top = (GISTInsertStack *) palloc0(sizeof(GISTInsertStack)); + top = palloc0_object(GISTInsertStack); top->blkno = GIST_ROOT_BLKNO; top->downlinkoffnum = InvalidOffsetNumber; @@ -975,7 +975,7 @@ gistFindPath(Relation r, BlockNumber child, OffsetNumber *downlinkoffnum) * leaf pages, and we assume that there can't be any non-leaf * pages behind leaf pages. */ - ptr = (GISTInsertStack *) palloc0(sizeof(GISTInsertStack)); + ptr = palloc0_object(GISTInsertStack); ptr->blkno = GistPageGetOpaque(page)->rightlink; ptr->downlinkoffnum = InvalidOffsetNumber; ptr->parent = top->parent; @@ -1000,7 +1000,7 @@ gistFindPath(Relation r, BlockNumber child, OffsetNumber *downlinkoffnum) else { /* Append this child to the list of pages to visit later */ - ptr = (GISTInsertStack *) palloc0(sizeof(GISTInsertStack)); + ptr = palloc0_object(GISTInsertStack); ptr->blkno = blkno; ptr->downlinkoffnum = i; ptr->parent = top; @@ -1218,7 +1218,7 @@ gistfixsplit(GISTInsertState *state, GISTSTATE *giststate) */ for (;;) { - GISTPageSplitInfo *si = palloc(sizeof(GISTPageSplitInfo)); + GISTPageSplitInfo *si = palloc_object(GISTPageSplitInfo); IndexTuple downlink; page = BufferGetPage(buf); @@ -1482,8 +1482,8 @@ gistSplit(Relation r, gistSplitByKey(r, page, itup, len, giststate, &v, 0); /* form left and right vector */ - lvectup = (IndexTuple *) palloc(sizeof(IndexTuple) * (len + 1)); - rvectup = (IndexTuple *) palloc(sizeof(IndexTuple) * (len + 1)); + lvectup = palloc_array(IndexTuple, len + 1); + rvectup = palloc_array(IndexTuple, len + 1); for (i = 0; i < v.splitVector.spl_nleft; i++) lvectup[i] = itup[v.splitVector.spl_left[i] - 1]; @@ -1552,7 +1552,7 @@ initGISTstate(Relation index) oldCxt = MemoryContextSwitchTo(scanCxt); /* Create and fill in the GISTSTATE */ - giststate = (GISTSTATE *) palloc(sizeof(GISTSTATE)); + giststate = palloc_object(GISTSTATE); giststate->scanCxt = scanCxt; giststate->tempCxt = scanCxt; /* caller must change this if needed */ diff --git a/src/backend/access/gist/gistbuild.c b/src/backend/access/gist/gistbuild.c index be0fd5b753..b9fa196149 100644 --- a/src/backend/access/gist/gistbuild.c +++ b/src/backend/access/gist/gistbuild.c @@ -346,7 +346,7 @@ gistbuild(Relation heap, Relation index, IndexInfo *indexInfo) /* * Return statistics */ - result = (IndexBuildResult *) palloc(sizeof(IndexBuildResult)); + result = palloc_object(IndexBuildResult); result->heap_tuples = reltuples; result->index_tuples = (double) buildstate.indtuples; @@ -409,7 +409,7 @@ gist_indexsortbuild(GISTBuildState *state) state->bulkstate = smgr_bulk_start_rel(state->indexrel, MAIN_FORKNUM); /* Allocate a temporary buffer for the first leaf page batch. */ - levelstate = palloc0(sizeof(GistSortedBuildLevelState)); + levelstate = palloc0_object(GistSortedBuildLevelState); levelstate->pages[0] = palloc(BLCKSZ); levelstate->parent = NULL; gistinitpage(levelstate->pages[0], F_LEAF); @@ -526,7 +526,7 @@ gist_indexsortbuild_levelstate_flush(GISTBuildState *state, else { /* Create split layout from single page */ - dist = (SplitPageLayout *) palloc0(sizeof(SplitPageLayout)); + dist = palloc0_object(SplitPageLayout); union_tuple = gistunion(state->indexrel, itvec, vect_len, state->giststate); dist->itup = union_tuple; @@ -597,7 +597,7 @@ gist_indexsortbuild_levelstate_flush(GISTBuildState *state, parent = levelstate->parent; if (parent == NULL) { - parent = palloc0(sizeof(GistSortedBuildLevelState)); + parent = palloc0_object(GistSortedBuildLevelState); parent->pages[0] = palloc(BLCKSZ); parent->parent = NULL; gistinitpage(parent->pages[0], 0); @@ -1154,7 +1154,7 @@ gistbufferinginserttuples(GISTBuildState *buildstate, Buffer buffer, int level, /* Create an array of all the downlink tuples */ ndownlinks = list_length(splitinfo); - downlinks = (IndexTuple *) palloc(sizeof(IndexTuple) * ndownlinks); + downlinks = palloc_array(IndexTuple, ndownlinks); i = 0; foreach(lc, splitinfo) { diff --git a/src/backend/access/gist/gistbuildbuffers.c b/src/backend/access/gist/gistbuildbuffers.c index 0707254d18..c86d17c4a5 100644 --- a/src/backend/access/gist/gistbuildbuffers.c +++ b/src/backend/access/gist/gistbuildbuffers.c @@ -46,7 +46,7 @@ gistInitBuildBuffers(int pagesPerBuffer, int levelStep, int maxLevel) GISTBuildBuffers *gfbb; HASHCTL hashCtl; - gfbb = palloc(sizeof(GISTBuildBuffers)); + gfbb = palloc_object(GISTBuildBuffers); gfbb->pagesPerBuffer = pagesPerBuffer; gfbb->levelStep = levelStep; @@ -60,7 +60,7 @@ gistInitBuildBuffers(int pagesPerBuffer, int levelStep, int maxLevel) /* Initialize free page management. */ gfbb->nFreeBlocks = 0; gfbb->freeBlocksLen = 32; - gfbb->freeBlocks = (long *) palloc(gfbb->freeBlocksLen * sizeof(long)); + gfbb->freeBlocks = palloc_array(long, gfbb->freeBlocksLen); /* * Current memory context will be used for all in-memory data structures @@ -87,8 +87,7 @@ gistInitBuildBuffers(int pagesPerBuffer, int levelStep, int maxLevel) * buffers are inserted here when they are created. */ gfbb->buffersOnLevelsLen = 1; - gfbb->buffersOnLevels = (List **) palloc(sizeof(List *) * - gfbb->buffersOnLevelsLen); + gfbb->buffersOnLevels = palloc_array(List *, gfbb->buffersOnLevelsLen); gfbb->buffersOnLevels[0] = NIL; /* @@ -96,8 +95,7 @@ gistInitBuildBuffers(int pagesPerBuffer, int levelStep, int maxLevel) * into main memory. */ gfbb->loadedBuffersLen = 32; - gfbb->loadedBuffers = (GISTNodeBuffer **) palloc(gfbb->loadedBuffersLen * - sizeof(GISTNodeBuffer *)); + gfbb->loadedBuffers = palloc_array(GISTNodeBuffer *, gfbb->loadedBuffersLen); gfbb->loadedBuffersCount = 0; gfbb->rootlevel = maxLevel; @@ -582,9 +580,7 @@ gistRelocateBuildBuffersOnSplit(GISTBuildBuffers *gfbb, GISTSTATE *giststate, * Allocate memory for information about relocation buffers. */ splitPagesCount = list_length(splitinfo); - relocationBuffersInfos = - (RelocationBufferInfo *) palloc(sizeof(RelocationBufferInfo) * - splitPagesCount); + relocationBuffersInfos = palloc_array(RelocationBufferInfo, splitPagesCount); /* * Fill relocation buffers information for node buffers of pages produced diff --git a/src/backend/access/gist/gistproc.c b/src/backend/access/gist/gistproc.c index f2ec6cbe2e..9ac06504be 100644 --- a/src/backend/access/gist/gistproc.c +++ b/src/backend/access/gist/gistproc.c @@ -171,7 +171,7 @@ gist_box_union(PG_FUNCTION_ARGS) *pageunion; numranges = entryvec->n; - pageunion = (BOX *) palloc(sizeof(BOX)); + pageunion = palloc_object(BOX); cur = DatumGetBoxP(entryvec->vector[0].key); memcpy(pageunion, cur, sizeof(BOX)); @@ -237,7 +237,7 @@ fallbackSplit(GistEntryVector *entryvec, GIST_SPLITVEC *v) v->spl_left[v->spl_nleft] = i; if (unionL == NULL) { - unionL = (BOX *) palloc(sizeof(BOX)); + unionL = palloc_object(BOX); *unionL = *cur; } else @@ -250,7 +250,7 @@ fallbackSplit(GistEntryVector *entryvec, GIST_SPLITVEC *v) v->spl_right[v->spl_nright] = i; if (unionR == NULL) { - unionR = (BOX *) palloc(sizeof(BOX)); + unionR = palloc_object(BOX); *unionR = *cur; } else @@ -698,8 +698,8 @@ gist_box_picksplit(PG_FUNCTION_ARGS) v->spl_nright = 0; /* Allocate bounding boxes of left and right groups */ - leftBox = palloc0(sizeof(BOX)); - rightBox = palloc0(sizeof(BOX)); + leftBox = palloc0_object(BOX); + rightBox = palloc0_object(BOX); /* * Allocate an array for "common entries" - entries which can be placed to @@ -1042,10 +1042,10 @@ gist_poly_compress(PG_FUNCTION_ARGS) POLYGON *in = DatumGetPolygonP(entry->key); BOX *r; - r = (BOX *) palloc(sizeof(BOX)); + r = palloc_object(BOX); memcpy(r, &(in->boundbox), sizeof(BOX)); - retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); + retval = palloc_object(GISTENTRY); gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, entry->offset, false); @@ -1107,13 +1107,13 @@ gist_circle_compress(PG_FUNCTION_ARGS) CIRCLE *in = DatumGetCircleP(entry->key); BOX *r; - r = (BOX *) palloc(sizeof(BOX)); + r = palloc_object(BOX); r->high.x = float8_pl(in->center.x, in->radius); r->low.x = float8_mi(in->center.x, in->radius); r->high.y = float8_pl(in->center.y, in->radius); r->low.y = float8_mi(in->center.y, in->radius); - retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); + retval = palloc_object(GISTENTRY); gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, entry->offset, false); @@ -1171,9 +1171,9 @@ gist_point_compress(PG_FUNCTION_ARGS) if (entry->leafkey) /* Point, actually */ { - BOX *box = palloc(sizeof(BOX)); + BOX *box = palloc_object(BOX); Point *point = DatumGetPointP(entry->key); - GISTENTRY *retval = palloc(sizeof(GISTENTRY)); + GISTENTRY *retval = palloc_object(GISTENTRY); box->high = box->low = *point; @@ -1200,9 +1200,9 @@ gist_point_fetch(PG_FUNCTION_ARGS) Point *r; GISTENTRY *retval; - retval = palloc(sizeof(GISTENTRY)); + retval = palloc_object(GISTENTRY); - r = (Point *) palloc(sizeof(Point)); + r = palloc_object(Point); r->x = in->high.x; r->y = in->high.y; gistentryinit(*retval, PointerGetDatum(r), diff --git a/src/backend/access/gist/gistscan.c b/src/backend/access/gist/gistscan.c index 700fa959d0..01b8ff0b6f 100644 --- a/src/backend/access/gist/gistscan.c +++ b/src/backend/access/gist/gistscan.c @@ -90,7 +90,7 @@ gistbeginscan(Relation r, int nkeys, int norderbys) oldCxt = MemoryContextSwitchTo(giststate->scanCxt); /* initialize opaque data */ - so = (GISTScanOpaque) palloc0(sizeof(GISTScanOpaqueData)); + so = palloc0_object(GISTScanOpaqueData); so->giststate = giststate; giststate->tempCxt = createTempGistContext(); so->queue = NULL; @@ -101,8 +101,8 @@ gistbeginscan(Relation r, int nkeys, int norderbys) so->qual_ok = true; /* in case there are zero keys */ if (scan->numberOfOrderBys > 0) { - scan->xs_orderbyvals = palloc0(sizeof(Datum) * scan->numberOfOrderBys); - scan->xs_orderbynulls = palloc(sizeof(bool) * scan->numberOfOrderBys); + scan->xs_orderbyvals = palloc0_array(Datum, scan->numberOfOrderBys); + scan->xs_orderbynulls = palloc_array(bool, scan->numberOfOrderBys); memset(scan->xs_orderbynulls, true, sizeof(bool) * scan->numberOfOrderBys); } diff --git a/src/backend/access/gist/gistsplit.c b/src/backend/access/gist/gistsplit.c index 49838ceb07..21fea505d9 100644 --- a/src/backend/access/gist/gistsplit.c +++ b/src/backend/access/gist/gistsplit.c @@ -51,7 +51,7 @@ gistunionsubkeyvec(GISTSTATE *giststate, IndexTuple *itvec, int i, cleanedLen = 0; - cleanedItVec = (IndexTuple *) palloc(sizeof(IndexTuple) * gsvp->len); + cleanedItVec = palloc_array(IndexTuple, gsvp->len); for (i = 0; i < gsvp->len; i++) { @@ -501,7 +501,7 @@ gistUserPicksplit(Relation r, GistEntryVector *entryvec, int attno, GistSplitVec * Locate don't-care tuples, if any. If there are none, the split is * optimal, so just fall out and return false. */ - v->spl_dontcare = (bool *) palloc0(sizeof(bool) * (entryvec->n + 1)); + v->spl_dontcare = palloc0_array(bool, entryvec->n + 1); NumDontCare = findDontCares(r, giststate, entryvec->vector, v, attno); @@ -738,9 +738,9 @@ gistSplitByKey(Relation r, Page page, IndexTuple *itup, int len, * call will overwrite that with its own result. */ backupSplit = v->splitVector; - backupSplit.spl_left = (OffsetNumber *) palloc(sizeof(OffsetNumber) * len); + backupSplit.spl_left = palloc_array(OffsetNumber, len); memcpy(backupSplit.spl_left, v->splitVector.spl_left, sizeof(OffsetNumber) * v->splitVector.spl_nleft); - backupSplit.spl_right = (OffsetNumber *) palloc(sizeof(OffsetNumber) * len); + backupSplit.spl_right = palloc_array(OffsetNumber, len); memcpy(backupSplit.spl_right, v->splitVector.spl_right, sizeof(OffsetNumber) * v->splitVector.spl_nright); /* Recursively decide how to split the don't-care tuples */ diff --git a/src/backend/access/gist/gistutil.c b/src/backend/access/gist/gistutil.c index 0a29a6013e..6fc56c3c89 100644 --- a/src/backend/access/gist/gistutil.c +++ b/src/backend/access/gist/gistutil.c @@ -100,7 +100,7 @@ gistextractpage(Page page, int *len /* out */ ) maxoff = PageGetMaxOffsetNumber(page); *len = maxoff; - itvec = palloc(sizeof(IndexTuple) * maxoff); + itvec = palloc_array(IndexTuple, maxoff); for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) itvec[i - FirstOffsetNumber] = (IndexTuple) PageGetItem(page, PageGetItemId(page, i)); @@ -113,7 +113,7 @@ gistextractpage(Page page, int *len /* out */ ) IndexTuple * gistjoinvector(IndexTuple *itvec, int *len, IndexTuple *additvec, int addlen) { - itvec = (IndexTuple *) repalloc(itvec, sizeof(IndexTuple) * ((*len) + addlen)); + itvec = repalloc_array(itvec, IndexTuple, (*len) + addlen); memmove(&itvec[*len], additvec, sizeof(IndexTuple) * addlen); *len += addlen; return itvec; diff --git a/src/backend/access/gist/gistvacuum.c b/src/backend/access/gist/gistvacuum.c index b925eda2b9..7591ad4da1 100644 --- a/src/backend/access/gist/gistvacuum.c +++ b/src/backend/access/gist/gistvacuum.c @@ -61,7 +61,7 @@ gistbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, { /* allocate stats if first time through, else re-use existing struct */ if (stats == NULL) - stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); + stats = palloc0_object(IndexBulkDeleteResult); gistvacuumscan(info, stats, callback, callback_state); @@ -85,7 +85,7 @@ gistvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats) */ if (stats == NULL) { - stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); + stats = palloc0_object(IndexBulkDeleteResult); gistvacuumscan(info, stats, NULL, NULL); } diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index 53061c819f..e388252afd 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -193,7 +193,7 @@ hashbuild(Relation heap, Relation index, IndexInfo *indexInfo) /* * Return statistics */ - result = (IndexBuildResult *) palloc(sizeof(IndexBuildResult)); + result = palloc_object(IndexBuildResult); result->heap_tuples = reltuples; result->index_tuples = buildstate.indtuples; @@ -318,8 +318,7 @@ hashgettuple(IndexScanDesc scan, ScanDirection dir) * entries. */ if (so->killedItems == NULL) - so->killedItems = (int *) - palloc(MaxIndexTuplesPerPage * sizeof(int)); + so->killedItems = palloc_array(int, MaxIndexTuplesPerPage); if (so->numKilled < MaxIndexTuplesPerPage) so->killedItems[so->numKilled++] = so->currPos.itemIndex; @@ -381,7 +380,7 @@ hashbeginscan(Relation rel, int nkeys, int norderbys) scan = RelationGetIndexScan(rel, nkeys, norderbys); - so = (HashScanOpaque) palloc(sizeof(HashScanOpaqueData)); + so = (HashScanOpaque) palloc_object(HashScanOpaqueData); HashScanPosInvalidate(so->currPos); so->hashso_bucket_buf = InvalidBuffer; so->hashso_split_bucket_buf = InvalidBuffer; @@ -633,7 +632,7 @@ loop_top: /* return statistics */ if (stats == NULL) - stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); + stats = palloc0_object(IndexBulkDeleteResult); stats->estimated_count = false; stats->num_index_tuples = num_index_tuples; stats->tuples_removed += tuples_removed; diff --git a/src/backend/access/hash/hashsort.c b/src/backend/access/hash/hashsort.c index 92ae3cf53f..0fd41f4f4c 100644 --- a/src/backend/access/hash/hashsort.c +++ b/src/backend/access/hash/hashsort.c @@ -59,7 +59,7 @@ struct HSpool HSpool * _h_spoolinit(Relation heap, Relation index, uint32 num_buckets) { - HSpool *hspool = (HSpool *) palloc0(sizeof(HSpool)); + HSpool *hspool = palloc0_object(HSpool); hspool->index = index; diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 4d382a0433..225f9829f2 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -1133,7 +1133,7 @@ heap_beginscan(Relation relation, Snapshot snapshot, */ if (flags & SO_TYPE_BITMAPSCAN) { - BitmapHeapScanDesc bscan = palloc(sizeof(BitmapHeapScanDescData)); + BitmapHeapScanDesc bscan = palloc_object(BitmapHeapScanDescData); /* * Bitmap Heap scans do not have any fields that a normal Heap Scan @@ -1142,7 +1142,7 @@ heap_beginscan(Relation relation, Snapshot snapshot, scan = (HeapScanDesc) bscan; } else - scan = (HeapScanDesc) palloc(sizeof(HeapScanDescData)); + scan = (HeapScanDesc) palloc_object(HeapScanDescData); scan->rs_base.rs_rd = relation; scan->rs_base.rs_snapshot = snapshot; @@ -1201,7 +1201,7 @@ heap_beginscan(Relation relation, Snapshot snapshot, * when doing a parallel scan. */ if (parallel_scan != NULL) - scan->rs_parallelworkerdata = palloc(sizeof(ParallelBlockTableScanWorkerData)); + scan->rs_parallelworkerdata = palloc_object(ParallelBlockTableScanWorkerData); else scan->rs_parallelworkerdata = NULL; @@ -1210,7 +1210,7 @@ heap_beginscan(Relation relation, Snapshot snapshot, * initscan() and we don't want to allocate memory again */ if (nkeys > 0) - scan->rs_base.rs_key = (ScanKey) palloc(sizeof(ScanKeyData) * nkeys); + scan->rs_base.rs_key = palloc_array(ScanKeyData, nkeys); else scan->rs_base.rs_key = NULL; @@ -2037,7 +2037,7 @@ GetBulkInsertState(void) { BulkInsertState bistate; - bistate = (BulkInsertState) palloc(sizeof(BulkInsertStateData)); + bistate = (BulkInsertState) palloc_object(BulkInsertStateData); bistate->strategy = GetAccessStrategy(BAS_BULKWRITE); bistate->current_buf = InvalidBuffer; bistate->next_free = InvalidBlockNumber; @@ -6895,7 +6895,7 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask, * even member XIDs >= OldestXmin often won't be kept by second pass. */ nnewmembers = 0; - newmembers = palloc(sizeof(MultiXactMember) * nmembers); + newmembers = palloc_array(MultiXactMember, nmembers); has_lockers = false; update_xid = InvalidTransactionId; update_committed = false; @@ -8711,7 +8711,7 @@ bottomup_sort_and_shrink(TM_IndexDeleteOp *delstate) Assert(delstate->ndeltids > 0); /* Calculate per-heap-block count of TIDs */ - blockgroups = palloc(sizeof(IndexDeleteCounts) * delstate->ndeltids); + blockgroups = palloc_array(IndexDeleteCounts, delstate->ndeltids); for (int i = 0; i < delstate->ndeltids; i++) { TM_IndexDelete *ideltid = &delstate->deltids[i]; diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index bcbac844bb..dd4fe6bf62 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -81,7 +81,7 @@ heapam_slot_callbacks(Relation relation) static IndexFetchTableData * heapam_index_fetch_begin(Relation rel) { - IndexFetchHeapData *hscan = palloc0(sizeof(IndexFetchHeapData)); + IndexFetchHeapData *hscan = palloc0_object(IndexFetchHeapData); hscan->xs_base.rel = rel; hscan->xs_cbuf = InvalidBuffer; @@ -717,8 +717,8 @@ heapam_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap, /* Preallocate values/isnull arrays */ natts = newTupDesc->natts; - values = (Datum *) palloc(natts * sizeof(Datum)); - isnull = (bool *) palloc(natts * sizeof(bool)); + values = palloc_array(Datum, natts); + isnull = palloc_array(bool, natts); /* Initialize the rewrite operation */ rwstate = begin_heap_rewrite(OldHeap, NewHeap, OldestXmin, *xid_cutoff, diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c index 66ab48f0fe..7ce3c5e268 100644 --- a/src/backend/access/heap/rewriteheap.c +++ b/src/backend/access/heap/rewriteheap.c @@ -249,7 +249,7 @@ begin_heap_rewrite(Relation old_heap, Relation new_heap, TransactionId oldest_xm old_cxt = MemoryContextSwitchTo(rw_cxt); /* Create and fill in the state struct */ - state = palloc0(sizeof(RewriteStateData)); + state = palloc0_object(RewriteStateData); state->rs_old_rel = old_heap; state->rs_new_rel = new_heap; diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index cc5b03eb7c..eff7c39da7 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -685,7 +685,7 @@ heap_vacuum_rel(Relation rel, const VacuumParams params, * of each rel. It's convenient for code in lazy_scan_heap to always use * these temp copies. */ - vacrel = (LVRelState *) palloc0(sizeof(LVRelState)); + vacrel = palloc0_object(LVRelState); vacrel->dbname = get_database_name(MyDatabaseId); vacrel->relnamespace = get_namespace_name(RelationGetNamespace(rel)); vacrel->relname = pstrdup(RelationGetRelationName(rel)); @@ -705,7 +705,7 @@ heap_vacuum_rel(Relation rel, const VacuumParams params, if (instrument && vacrel->nindexes > 0) { /* Copy index names used by instrumentation (not error reporting) */ - indnames = palloc(sizeof(char *) * vacrel->nindexes); + indnames = palloc_array(char *, vacrel->nindexes); for (int i = 0; i < vacrel->nindexes; i++) indnames[i] = pstrdup(RelationGetRelationName(vacrel->indrels[i])); } @@ -3582,7 +3582,7 @@ dead_items_alloc(LVRelState *vacrel, int nworkers) * locally. */ - dead_items_info = (VacDeadItemsInfo *) palloc(sizeof(VacDeadItemsInfo)); + dead_items_info = palloc_object(VacDeadItemsInfo); dead_items_info->max_bytes = vac_work_mem * (Size) 1024; dead_items_info->num_items = 0; vacrel->dead_items_info = dead_items_info; diff --git a/src/backend/access/index/amvalidate.c b/src/backend/access/index/amvalidate.c index 4cf237019a..8d7e7171bd 100644 --- a/src/backend/access/index/amvalidate.c +++ b/src/backend/access/index/amvalidate.c @@ -118,7 +118,7 @@ identify_opfamily_groups(CatCList *oprlist, CatCList *proclist) } /* Time for a new group */ - thisgroup = (OpFamilyOpFuncGroup *) palloc(sizeof(OpFamilyOpFuncGroup)); + thisgroup = palloc_object(OpFamilyOpFuncGroup); if (oprform && (!procform || (oprform->amoplefttype < procform->amproclefttype || diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index c96917085c..707c25289c 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -81,7 +81,7 @@ RelationGetIndexScan(Relation indexRelation, int nkeys, int norderbys) { IndexScanDesc scan; - scan = (IndexScanDesc) palloc(sizeof(IndexScanDescData)); + scan = palloc_object(IndexScanDescData); scan->heapRelation = NULL; /* may be set later */ scan->xs_heapfetch = NULL; @@ -94,11 +94,11 @@ RelationGetIndexScan(Relation indexRelation, int nkeys, int norderbys) * We allocate key workspace here, but it won't get filled until amrescan. */ if (nkeys > 0) - scan->keyData = (ScanKey) palloc(sizeof(ScanKeyData) * nkeys); + scan->keyData = palloc_array(ScanKeyData, nkeys); else scan->keyData = NULL; if (norderbys > 0) - scan->orderByData = (ScanKey) palloc(sizeof(ScanKeyData) * norderbys); + scan->orderByData = palloc_array(ScanKeyData, norderbys); else scan->orderByData = NULL; @@ -310,8 +310,8 @@ index_compute_xid_horizon_for_tuples(Relation irel, delstate.bottomup = false; delstate.bottomupfreespace = 0; delstate.ndeltids = 0; - delstate.deltids = palloc(nitems * sizeof(TM_IndexDelete)); - delstate.status = palloc(nitems * sizeof(TM_IndexStatus)); + delstate.deltids = palloc_array(TM_IndexDelete, nitems); + delstate.status = palloc_array(TM_IndexStatus, nitems); /* identify what the index tuples about to be deleted point to */ for (int i = 0; i < nitems; i++) @@ -401,7 +401,7 @@ systable_beginscan(Relation heapRelation, else irel = NULL; - sysscan = (SysScanDesc) palloc(sizeof(SysScanDescData)); + sysscan = palloc_object(SysScanDescData); sysscan->heap_rel = heapRelation; sysscan->irel = irel; @@ -667,7 +667,7 @@ systable_beginscan_ordered(Relation heapRelation, elog(WARNING, "using index \"%s\" despite IgnoreSystemIndexes", RelationGetRelationName(indexRelation)); - sysscan = (SysScanDesc) palloc(sizeof(SysScanDescData)); + sysscan = palloc_object(SysScanDescData); sysscan->heap_rel = heapRelation; sysscan->irel = indexRelation; diff --git a/src/backend/access/nbtree/nbtdedup.c b/src/backend/access/nbtree/nbtdedup.c index a746de45dd..4c8ac8e753 100644 --- a/src/backend/access/nbtree/nbtdedup.c +++ b/src/backend/access/nbtree/nbtdedup.c @@ -82,7 +82,7 @@ _bt_dedup_pass(Relation rel, Buffer buf, IndexTuple newitem, Size newitemsz, * That ought to leave us with a good split point when pages full of * duplicates can be split several times. */ - state = (BTDedupState) palloc(sizeof(BTDedupStateData)); + state = palloc_object(BTDedupStateData); state->deduplicate = true; state->nmaxitems = 0; state->maxpostingsize = Min(BTMaxItemSize / 2, INDEX_SIZE_MASK); @@ -321,7 +321,7 @@ _bt_bottomupdel_pass(Relation rel, Buffer buf, Relation heapRel, newitemsz += sizeof(ItemIdData); /* Initialize deduplication state */ - state = (BTDedupState) palloc(sizeof(BTDedupStateData)); + state = palloc_object(BTDedupStateData); state->deduplicate = true; state->nmaxitems = 0; state->maxpostingsize = BLCKSZ; /* We're not really deduplicating */ @@ -355,8 +355,8 @@ _bt_bottomupdel_pass(Relation rel, Buffer buf, Relation heapRel, delstate.bottomup = true; delstate.bottomupfreespace = Max(BLCKSZ / 16, newitemsz); delstate.ndeltids = 0; - delstate.deltids = palloc(MaxTIDsPerBTreePage * sizeof(TM_IndexDelete)); - delstate.status = palloc(MaxTIDsPerBTreePage * sizeof(TM_IndexStatus)); + delstate.deltids = palloc_array(TM_IndexDelete, MaxTIDsPerBTreePage); + delstate.status = palloc_array(TM_IndexStatus, MaxTIDsPerBTreePage); minoff = P_FIRSTDATAKEY(opaque); maxoff = PageGetMaxOffsetNumber(page); diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index 3a4b791f2a..031eb76ba8 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -2963,7 +2963,7 @@ _bt_deadblocks(Page page, OffsetNumber *deletable, int ndeletable, */ spacentids = ndeletable + 1; ntids = 0; - tidblocks = (BlockNumber *) palloc(sizeof(BlockNumber) * spacentids); + tidblocks = palloc_array(BlockNumber, spacentids); /* * First add the table block for the incoming newitem. This is the one diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index a8d56fe5a7..cfb07b2bca 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -2982,7 +2982,7 @@ _bt_pendingfsm_init(Relation rel, BTVacState *vstate, bool cleanuponly) vstate->maxbufsize = (int) maxbufsize; /* Allocate buffer, indicate that there are currently 0 pending pages */ - vstate->pendingpages = palloc(sizeof(BTPendingFSM) * vstate->bufsize); + vstate->pendingpages = palloc_array(BTPendingFSM, vstate->bufsize); vstate->npendingpages = 0; } diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 211e20ebcb..6197b725fb 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -261,8 +261,7 @@ btgettuple(IndexScanDesc scan, ScanDirection dir) * just forget any excess entries. */ if (so->killedItems == NULL) - so->killedItems = (int *) - palloc(MaxTIDsPerBTreePage * sizeof(int)); + so->killedItems = palloc_array(int, MaxTIDsPerBTreePage); if (so->numKilled < MaxTIDsPerBTreePage) so->killedItems[so->numKilled++] = so->currPos.itemIndex; } @@ -346,7 +345,7 @@ btbeginscan(Relation rel, int nkeys, int norderbys) scan = RelationGetIndexScan(rel, nkeys, norderbys); /* allocate private workspace */ - so = (BTScanOpaque) palloc(sizeof(BTScanOpaqueData)); + so = palloc_object(BTScanOpaqueData); BTScanPosInvalidate(so->currPos); BTScanPosInvalidate(so->markPos); if (scan->numberOfKeys > 0) @@ -1140,7 +1139,7 @@ btbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, /* allocate stats if first time through, else re-use existing struct */ if (stats == NULL) - stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); + stats = palloc0_object(IndexBulkDeleteResult); /* Establish the vacuum cycle ID to use for this scan */ /* The ENSURE stuff ensures we clean up shared memory on failure */ @@ -1201,7 +1200,7 @@ btvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats) * We handle the problem by making num_index_tuples an estimate in * cleanup-only case. */ - stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); + stats = palloc0_object(IndexBulkDeleteResult); btvacuumscan(info, stats, NULL, NULL, 0); stats->estimated_count = true; } diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index 7fcd7e94ea..aec7109366 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -159,7 +159,7 @@ _bt_search(Relation rel, Relation heaprel, BTScanInsert key, Buffer *bufP, * page one level down, it usually ends up inserting a new pivot * tuple/downlink immediately after the location recorded here. */ - new_stack = (BTStack) palloc(sizeof(BTStackData)); + new_stack = (BTStack) palloc_object(BTStackData); new_stack->bts_blkno = BufferGetBlockNumber(*bufP); new_stack->bts_offset = offnum; new_stack->bts_parent = stack_in; diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index 454adaee7d..d7695dc110 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -335,7 +335,7 @@ btbuild(Relation heap, Relation index, IndexInfo *indexInfo) if (buildstate.btleader) _bt_end_parallel(buildstate.btleader); - result = (IndexBuildResult *) palloc(sizeof(IndexBuildResult)); + result = palloc_object(IndexBuildResult); result->heap_tuples = reltuples; result->index_tuples = buildstate.indtuples; @@ -366,7 +366,7 @@ static double _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, IndexInfo *indexInfo) { - BTSpool *btspool = (BTSpool *) palloc0(sizeof(BTSpool)); + BTSpool *btspool = palloc0_object(BTSpool); SortCoordinate coordinate = NULL; double reltuples = 0; @@ -399,7 +399,7 @@ _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, */ if (buildstate->btleader) { - coordinate = (SortCoordinate) palloc0(sizeof(SortCoordinateData)); + coordinate = palloc0_object(SortCoordinateData); coordinate->isWorker = false; coordinate->nParticipants = buildstate->btleader->nparticipanttuplesorts; @@ -440,7 +440,7 @@ _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, */ if (indexInfo->ii_Unique) { - BTSpool *btspool2 = (BTSpool *) palloc0(sizeof(BTSpool)); + BTSpool *btspool2 = palloc0_object(BTSpool); SortCoordinate coordinate2 = NULL; /* Initialize secondary spool */ @@ -457,7 +457,7 @@ _bt_spools_heapscan(Relation heap, Relation index, BTBuildState *buildstate, * tuplesort_begin_index_btree() about the basic high level * coordination of a parallel sort. */ - coordinate2 = (SortCoordinate) palloc0(sizeof(SortCoordinateData)); + coordinate2 = palloc0_object(SortCoordinateData); coordinate2->isWorker = false; coordinate2->nParticipants = buildstate->btleader->nparticipanttuplesorts; @@ -648,7 +648,7 @@ _bt_blwritepage(BTWriteState *wstate, BulkWriteBuffer buf, BlockNumber blkno) static BTPageState * _bt_pagestate(BTWriteState *wstate, uint32 level) { - BTPageState *state = (BTPageState *) palloc0(sizeof(BTPageState)); + BTPageState *state = palloc0_object(BTPageState); /* create initial page for level */ state->btps_buf = _bt_blnewpage(wstate, level); @@ -1002,7 +1002,7 @@ _bt_buildadd(BTWriteState *wstate, BTPageState *state, IndexTuple itup, if (last_off == P_HIKEY) { Assert(state->btps_lowkey == NULL); - state->btps_lowkey = palloc0(sizeof(IndexTupleData)); + state->btps_lowkey = palloc0_object(IndexTupleData); state->btps_lowkey->t_info = sizeof(IndexTupleData); BTreeTupleSetNAtts(state->btps_lowkey, 0, false); } @@ -1164,7 +1164,7 @@ _bt_load(BTWriteState *wstate, BTSpool *btspool, BTSpool *btspool2) itup2 = tuplesort_getindextuple(btspool2->sortstate, true); /* Prepare SortSupport data for each column */ - sortKeys = (SortSupport) palloc0(keysz * sizeof(SortSupportData)); + sortKeys = palloc0_array(SortSupportData, keysz); for (i = 0; i < keysz; i++) { @@ -1266,7 +1266,7 @@ _bt_load(BTWriteState *wstate, BTSpool *btspool, BTSpool *btspool2) /* merge is unnecessary, deduplicate into posting lists */ BTDedupState dstate; - dstate = (BTDedupState) palloc(sizeof(BTDedupStateData)); + dstate = palloc_object(BTDedupStateData); dstate->deduplicate = true; /* unused */ dstate->nmaxitems = 0; /* unused */ dstate->maxpostingsize = 0; /* set later */ @@ -1404,7 +1404,7 @@ _bt_begin_parallel(BTBuildState *buildstate, bool isconcurrent, int request) Sharedsort *sharedsort; Sharedsort *sharedsort2; BTSpool *btspool = buildstate->spool; - BTLeader *btleader = (BTLeader *) palloc0(sizeof(BTLeader)); + BTLeader *btleader = palloc0_object(BTLeader); WalUsage *walusage; BufferUsage *bufferusage; bool leaderparticipates = true; @@ -1693,7 +1693,7 @@ _bt_leader_participate_as_worker(BTBuildState *buildstate) int sortmem; /* Allocate memory and initialize private spool */ - leaderworker = (BTSpool *) palloc0(sizeof(BTSpool)); + leaderworker = palloc0_object(BTSpool); leaderworker->heap = buildstate->spool->heap; leaderworker->index = buildstate->spool->index; leaderworker->isunique = buildstate->spool->isunique; @@ -1705,7 +1705,7 @@ _bt_leader_participate_as_worker(BTBuildState *buildstate) else { /* Allocate memory for worker's own private secondary spool */ - leaderworker2 = (BTSpool *) palloc0(sizeof(BTSpool)); + leaderworker2 = palloc0_object(BTSpool); /* Initialize worker's own secondary spool */ leaderworker2->heap = leaderworker->heap; @@ -1796,7 +1796,7 @@ _bt_parallel_build_main(dsm_segment *seg, shm_toc *toc) indexRel = index_open(btshared->indexrelid, indexLockmode); /* Initialize worker's own spool */ - btspool = (BTSpool *) palloc0(sizeof(BTSpool)); + btspool = palloc0_object(BTSpool); btspool->heap = heapRel; btspool->index = indexRel; btspool->isunique = btshared->isunique; @@ -1813,7 +1813,7 @@ _bt_parallel_build_main(dsm_segment *seg, shm_toc *toc) else { /* Allocate memory for worker's own private secondary spool */ - btspool2 = (BTSpool *) palloc0(sizeof(BTSpool)); + btspool2 = palloc0_object(BTSpool); /* Initialize worker's own secondary spool */ btspool2->heap = btspool->heap; @@ -1874,7 +1874,7 @@ _bt_parallel_scan_and_sort(BTSpool *btspool, BTSpool *btspool2, IndexInfo *indexInfo; /* Initialize local tuplesort coordination state */ - coordinate = palloc0(sizeof(SortCoordinateData)); + coordinate = palloc0_object(SortCoordinateData); coordinate->isWorker = true; coordinate->nParticipants = -1; coordinate->sharedsort = sharedsort; @@ -1901,7 +1901,7 @@ _bt_parallel_scan_and_sort(BTSpool *btspool, BTSpool *btspool2, * worker). Worker processes are generally permitted to allocate * work_mem independently. */ - coordinate2 = palloc0(sizeof(SortCoordinateData)); + coordinate2 = palloc0_object(SortCoordinateData); coordinate2->isWorker = true; coordinate2->nParticipants = -1; coordinate2->sharedsort = sharedsort2; diff --git a/src/backend/access/nbtree/nbtsplitloc.c b/src/backend/access/nbtree/nbtsplitloc.c index f0082f88c7..651ab01302 100644 --- a/src/backend/access/nbtree/nbtsplitloc.c +++ b/src/backend/access/nbtree/nbtsplitloc.c @@ -197,7 +197,7 @@ _bt_findsplitloc(Relation rel, * between tuples will be legal). */ state.maxsplits = maxoff; - state.splits = palloc(sizeof(SplitPoint) * state.maxsplits); + state.splits = palloc_array(SplitPoint, state.maxsplits); state.nsplits = 0; /* diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c index d4a26de06a..dbe67c166f 100644 --- a/src/backend/access/nbtree/nbtxlog.c +++ b/src/backend/access/nbtree/nbtxlog.c @@ -469,7 +469,7 @@ btree_xlog_dedup(XLogReaderState *record) BTDedupInterval *intervals; Page newpage; - state = (BTDedupState) palloc(sizeof(BTDedupStateData)); + state = palloc_object(BTDedupStateData); state->deduplicate = true; /* unused */ state->nmaxitems = 0; /* unused */ /* Conservatively use larger maxpostingsize than primary */ diff --git a/src/backend/access/spgist/spgdoinsert.c b/src/backend/access/spgist/spgdoinsert.c index 4eadb51877..1e1e61d204 100644 --- a/src/backend/access/spgist/spgdoinsert.c +++ b/src/backend/access/spgist/spgdoinsert.c @@ -89,7 +89,7 @@ addNode(SpGistState *state, SpGistInnerTuple tuple, Datum label, int offset) else if (offset > tuple->nNodes) elog(ERROR, "invalid offset for adding node to SPGiST inner tuple"); - nodes = palloc(sizeof(SpGistNodeTuple) * (tuple->nNodes + 1)); + nodes = palloc_array(SpGistNodeTuple, tuple->nNodes + 1); SGITITERATE(tuple, i, node) { if (i < offset) @@ -409,8 +409,8 @@ moveLeafs(Relation index, SpGistState *state, /* Locate the tuples to be moved, and count up the space needed */ i = PageGetMaxOffsetNumber(current->page); - toDelete = (OffsetNumber *) palloc(sizeof(OffsetNumber) * i); - toInsert = (OffsetNumber *) palloc(sizeof(OffsetNumber) * (i + 1)); + toDelete = palloc_array(OffsetNumber, i); + toInsert = palloc_array(OffsetNumber, i + 1); size = newLeafTuple->size + sizeof(ItemIdData); @@ -634,7 +634,7 @@ checkAllTheSame(spgPickSplitIn *in, spgPickSplitOut *out, bool tooBig, { Datum theLabel = out->nodeLabels[theNode]; - out->nodeLabels = (Datum *) palloc(sizeof(Datum) * out->nNodes); + out->nodeLabels = palloc_array(Datum, out->nNodes); for (i = 0; i < out->nNodes; i++) out->nodeLabels[i] = theLabel; } @@ -717,12 +717,12 @@ doPickSplit(Relation index, SpGistState *state, */ max = PageGetMaxOffsetNumber(current->page); n = max + 1; - in.datums = (Datum *) palloc(sizeof(Datum) * n); - toDelete = (OffsetNumber *) palloc(sizeof(OffsetNumber) * n); - toInsert = (OffsetNumber *) palloc(sizeof(OffsetNumber) * n); - oldLeafs = (SpGistLeafTuple *) palloc(sizeof(SpGistLeafTuple) * n); - newLeafs = (SpGistLeafTuple *) palloc(sizeof(SpGistLeafTuple) * n); - leafPageSelect = (uint8 *) palloc(sizeof(uint8) * n); + in.datums = palloc_array(Datum, n); + toDelete = palloc_array(OffsetNumber, n); + toInsert = palloc_array(OffsetNumber, n); + oldLeafs = palloc_array(SpGistLeafTuple, n); + newLeafs = palloc_array(SpGistLeafTuple, n); + leafPageSelect = palloc_array(uint8, n); STORE_STATE(state, xlrec.stateSrc); @@ -858,7 +858,7 @@ doPickSplit(Relation index, SpGistState *state, out.hasPrefix = false; out.nNodes = 1; out.nodeLabels = NULL; - out.mapTuplesToNodes = palloc0(sizeof(int) * in.nTuples); + out.mapTuplesToNodes = palloc0_array(int, in.nTuples); /* * Form new leaf tuples and count up the total space needed. @@ -914,8 +914,8 @@ doPickSplit(Relation index, SpGistState *state, * out.nNodes with a value larger than the number of tuples on the input * page, we can't allocate these arrays before here. */ - nodes = (SpGistNodeTuple *) palloc(sizeof(SpGistNodeTuple) * out.nNodes); - leafSizes = (int *) palloc0(sizeof(int) * out.nNodes); + nodes = palloc_array(SpGistNodeTuple, out.nNodes); + leafSizes = palloc0_array(int, out.nNodes); /* * Form nodes of inner tuple and inner tuple itself @@ -1054,7 +1054,7 @@ doPickSplit(Relation index, SpGistState *state, * do so, even if totalLeafSizes is less than the available space, * because we can't split a group across pages. */ - nodePageSelect = (uint8 *) palloc(sizeof(uint8) * out.nNodes); + nodePageSelect = palloc_array(uint8, out.nNodes); curspace = currentFreeSpace; newspace = PageGetExactFreeSpace(BufferGetPage(newLeafBuffer)); @@ -1740,8 +1740,7 @@ spgSplitNodeAction(Relation index, SpGistState *state, * Construct new prefix tuple with requested number of nodes. We'll fill * in the childNodeN'th node's downlink below. */ - nodes = (SpGistNodeTuple *) palloc(sizeof(SpGistNodeTuple) * - out->result.splitTuple.prefixNNodes); + nodes = palloc_array(SpGistNodeTuple, out->result.splitTuple.prefixNNodes); for (i = 0; i < out->result.splitTuple.prefixNNodes; i++) { @@ -1769,7 +1768,7 @@ spgSplitNodeAction(Relation index, SpGistState *state, * same node datums, but with the prefix specified by the picksplit * function. */ - nodes = palloc(sizeof(SpGistNodeTuple) * innerTuple->nNodes); + nodes = palloc_array(SpGistNodeTuple, innerTuple->nNodes); SGITITERATE(innerTuple, i, node) { nodes[i] = node; diff --git a/src/backend/access/spgist/spginsert.c b/src/backend/access/spgist/spginsert.c index 6a61e093fa..dda99755f6 100644 --- a/src/backend/access/spgist/spginsert.c +++ b/src/backend/access/spgist/spginsert.c @@ -140,7 +140,7 @@ spgbuild(Relation heap, Relation index, IndexInfo *indexInfo) true); } - result = (IndexBuildResult *) palloc0(sizeof(IndexBuildResult)); + result = palloc0_object(IndexBuildResult); result->heap_tuples = reltuples; result->index_tuples = buildstate.indtuples; diff --git a/src/backend/access/spgist/spgkdtreeproc.c b/src/backend/access/spgist/spgkdtreeproc.c index d6989759e5..f0167d6ffa 100644 --- a/src/backend/access/spgist/spgkdtreeproc.c +++ b/src/backend/access/spgist/spgkdtreeproc.c @@ -114,7 +114,7 @@ spg_kd_picksplit(PG_FUNCTION_ARGS) SortedPoint *sorted; double coord; - sorted = palloc(sizeof(*sorted) * in->nTuples); + sorted = palloc_array(SortedPoint, in->nTuples); for (i = 0; i < in->nTuples; i++) { sorted[i].p = DatumGetPointP(in->datums[i]); @@ -132,8 +132,8 @@ spg_kd_picksplit(PG_FUNCTION_ARGS) out->nNodes = 2; out->nodeLabels = NULL; /* we don't need node labels */ - out->mapTuplesToNodes = palloc(sizeof(int) * in->nTuples); - out->leafTupleDatums = palloc(sizeof(Datum) * in->nTuples); + out->mapTuplesToNodes = palloc_array(int, in->nTuples); + out->leafTupleDatums = palloc_array(Datum, in->nTuples); /* * Note: points that have coordinates exactly equal to coord may get @@ -259,7 +259,7 @@ spg_kd_inner_consistent(PG_FUNCTION_ARGS) if (!which) PG_RETURN_VOID(); - out->nodeNumbers = (int *) palloc(sizeof(int) * 2); + out->nodeNumbers = palloc_array(int, 2); /* * When ordering scan keys are specified, we've to calculate distance for @@ -273,8 +273,8 @@ spg_kd_inner_consistent(PG_FUNCTION_ARGS) BOX infArea; BOX *area; - out->distances = (double **) palloc(sizeof(double *) * in->nNodes); - out->traversalValues = (void **) palloc(sizeof(void *) * in->nNodes); + out->distances = palloc_array(double *, in->nNodes); + out->traversalValues = palloc_array(void *, in->nNodes); if (in->level == 0) { @@ -335,7 +335,7 @@ spg_kd_inner_consistent(PG_FUNCTION_ARGS) } /* Set up level increments, too */ - out->levelAdds = (int *) palloc(sizeof(int) * 2); + out->levelAdds = palloc_array(int, 2); out->levelAdds[0] = 1; out->levelAdds[1] = 1; diff --git a/src/backend/access/spgist/spgproc.c b/src/backend/access/spgist/spgproc.c index 722c17ce2e..e169c60a46 100644 --- a/src/backend/access/spgist/spgproc.c +++ b/src/backend/access/spgist/spgproc.c @@ -64,7 +64,7 @@ spg_key_orderbys_distances(Datum key, bool isLeaf, ScanKey orderbys, int norderbys) { int sk_num; - double *distances = (double *) palloc(norderbys * sizeof(double)), + double *distances = palloc_array(double, norderbys), *distance = distances; for (sk_num = 0; sk_num < norderbys; ++sk_num, ++orderbys, ++distance) @@ -81,7 +81,7 @@ spg_key_orderbys_distances(Datum key, bool isLeaf, BOX * box_copy(BOX *orig) { - BOX *result = palloc(sizeof(BOX)); + BOX *result = palloc_object(BOX); *result = *orig; return result; diff --git a/src/backend/access/spgist/spgquadtreeproc.c b/src/backend/access/spgist/spgquadtreeproc.c index 3e8cfa1709..75ffb09ca5 100644 --- a/src/backend/access/spgist/spgquadtreeproc.c +++ b/src/backend/access/spgist/spgquadtreeproc.c @@ -82,7 +82,7 @@ getQuadrant(Point *centroid, Point *tst) static BOX * getQuadrantArea(BOX *bbox, Point *centroid, int quadrant) { - BOX *result = (BOX *) palloc(sizeof(BOX)); + BOX *result = palloc_object(BOX); switch (quadrant) { @@ -177,11 +177,11 @@ spg_quad_picksplit(PG_FUNCTION_ARGS) /* Use the median values of x and y as the centroid point */ Point **sorted; - sorted = palloc(sizeof(*sorted) * in->nTuples); + sorted = palloc_array(Point *, in->nTuples); for (i = 0; i < in->nTuples; i++) sorted[i] = DatumGetPointP(in->datums[i]); - centroid = palloc(sizeof(*centroid)); + centroid = palloc_object(Point); qsort(sorted, in->nTuples, sizeof(*sorted), x_cmp); centroid->x = sorted[in->nTuples >> 1]->x; @@ -189,7 +189,7 @@ spg_quad_picksplit(PG_FUNCTION_ARGS) centroid->y = sorted[in->nTuples >> 1]->y; #else /* Use the average values of x and y as the centroid point */ - centroid = palloc0(sizeof(*centroid)); + centroid = palloc0_object(Point); for (i = 0; i < in->nTuples; i++) { @@ -207,8 +207,8 @@ spg_quad_picksplit(PG_FUNCTION_ARGS) out->nNodes = 4; out->nodeLabels = NULL; /* we don't need node labels */ - out->mapTuplesToNodes = palloc(sizeof(int) * in->nTuples); - out->leafTupleDatums = palloc(sizeof(Datum) * in->nTuples); + out->mapTuplesToNodes = palloc_array(int, in->nTuples); + out->leafTupleDatums = palloc_array(Datum, in->nTuples); for (i = 0; i < in->nTuples; i++) { @@ -246,8 +246,8 @@ spg_quad_inner_consistent(PG_FUNCTION_ARGS) */ if (in->norderbys > 0) { - out->distances = (double **) palloc(sizeof(double *) * in->nNodes); - out->traversalValues = (void **) palloc(sizeof(void *) * in->nNodes); + out->distances = palloc_array(double *, in->nNodes); + out->traversalValues = palloc_array(void *, in->nNodes); if (in->level == 0) { @@ -270,7 +270,7 @@ spg_quad_inner_consistent(PG_FUNCTION_ARGS) { /* Report that all nodes should be visited */ out->nNodes = in->nNodes; - out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes); + out->nodeNumbers = palloc_array(int, in->nNodes); for (i = 0; i < in->nNodes; i++) { out->nodeNumbers[i] = i; @@ -368,12 +368,12 @@ spg_quad_inner_consistent(PG_FUNCTION_ARGS) break; /* no need to consider remaining conditions */ } - out->levelAdds = palloc(sizeof(int) * 4); + out->levelAdds = palloc_array(int, 4); for (i = 0; i < 4; ++i) out->levelAdds[i] = 1; /* We must descend into the quadrant(s) identified by which */ - out->nodeNumbers = (int *) palloc(sizeof(int) * 4); + out->nodeNumbers = palloc_array(int, 4); out->nNodes = 0; for (i = 1; i <= 4; i++) diff --git a/src/backend/access/spgist/spgscan.c b/src/backend/access/spgist/spgscan.c index 25893050c5..946772f395 100644 --- a/src/backend/access/spgist/spgscan.c +++ b/src/backend/access/spgist/spgscan.c @@ -309,9 +309,9 @@ spgbeginscan(Relation rel, int keysz, int orderbysz) scan = RelationGetIndexScan(rel, keysz, orderbysz); - so = (SpGistScanOpaque) palloc0(sizeof(SpGistScanOpaqueData)); + so = palloc0_object(SpGistScanOpaqueData); if (keysz > 0) - so->keyData = (ScanKey) palloc(sizeof(ScanKeyData) * keysz); + so->keyData = palloc_array(ScanKeyData, keysz); else so->keyData = NULL; initSpGistState(&so->state, scan->indexRelation); @@ -336,16 +336,12 @@ spgbeginscan(Relation rel, int keysz, int orderbysz) if (scan->numberOfOrderBys > 0) { /* This will be filled in spgrescan, but allocate the space here */ - so->orderByTypes = (Oid *) - palloc(sizeof(Oid) * scan->numberOfOrderBys); - so->nonNullOrderByOffsets = (int *) - palloc(sizeof(int) * scan->numberOfOrderBys); + so->orderByTypes = palloc_array(Oid, scan->numberOfOrderBys); + so->nonNullOrderByOffsets = palloc_array(int, scan->numberOfOrderBys); /* These arrays have constant contents, so we can fill them now */ - so->zeroDistances = (double *) - palloc(sizeof(double) * scan->numberOfOrderBys); - so->infDistances = (double *) - palloc(sizeof(double) * scan->numberOfOrderBys); + so->zeroDistances = palloc_array(double, scan->numberOfOrderBys); + so->infDistances = palloc_array(double, scan->numberOfOrderBys); for (i = 0; i < scan->numberOfOrderBys; i++) { @@ -353,10 +349,8 @@ spgbeginscan(Relation rel, int keysz, int orderbysz) so->infDistances[i] = get_float8_infinity(); } - scan->xs_orderbyvals = (Datum *) - palloc0(sizeof(Datum) * scan->numberOfOrderBys); - scan->xs_orderbynulls = (bool *) - palloc(sizeof(bool) * scan->numberOfOrderBys); + scan->xs_orderbyvals = palloc0_array(Datum, scan->numberOfOrderBys); + scan->xs_orderbynulls = palloc_array(bool, scan->numberOfOrderBys); memset(scan->xs_orderbynulls, true, sizeof(bool) * scan->numberOfOrderBys); } @@ -690,7 +684,7 @@ spgInnerTest(SpGistScanOpaque so, SpGistSearchItem *item, { /* force all children to be visited */ out.nNodes = nNodes; - out.nodeNumbers = (int *) palloc(sizeof(int) * nNodes); + out.nodeNumbers = palloc_array(int, nNodes); for (i = 0; i < nNodes; i++) out.nodeNumbers[i] = i; } @@ -703,7 +697,7 @@ spgInnerTest(SpGistScanOpaque so, SpGistSearchItem *item, { /* collect node pointers */ SpGistNodeTuple node; - SpGistNodeTuple *nodes = (SpGistNodeTuple *) palloc(sizeof(SpGistNodeTuple) * nNodes); + SpGistNodeTuple *nodes = palloc_array(SpGistNodeTuple, nNodes); SGITITERATE(innerTuple, i, node) { @@ -972,8 +966,8 @@ storeGettuple(SpGistScanOpaque so, ItemPointer heapPtr, so->distances[so->nPtrs] = NULL; else { - IndexOrderByDistance *distances = - palloc(sizeof(distances[0]) * so->numberOfOrderBys); + IndexOrderByDistance *distances = palloc_array(IndexOrderByDistance, + so->numberOfOrderBys); int i; for (i = 0; i < so->numberOfOrderBys; i++) diff --git a/src/backend/access/spgist/spgtextproc.c b/src/backend/access/spgist/spgtextproc.c index 91f4ab260c..09be7ffe47 100644 --- a/src/backend/access/spgist/spgtextproc.c +++ b/src/backend/access/spgist/spgtextproc.c @@ -230,8 +230,7 @@ spg_text_choose(PG_FUNCTION_ARGS) formTextDatum(prefixStr, commonLen); } out->result.splitTuple.prefixNNodes = 1; - out->result.splitTuple.prefixNodeLabels = - (Datum *) palloc(sizeof(Datum)); + out->result.splitTuple.prefixNodeLabels = palloc_object(Datum); out->result.splitTuple.prefixNodeLabels[0] = Int16GetDatum(*(unsigned char *) (prefixStr + commonLen)); @@ -303,7 +302,7 @@ spg_text_choose(PG_FUNCTION_ARGS) out->result.splitTuple.prefixHasPrefix = in->hasPrefix; out->result.splitTuple.prefixPrefixDatum = in->prefixDatum; out->result.splitTuple.prefixNNodes = 1; - out->result.splitTuple.prefixNodeLabels = (Datum *) palloc(sizeof(Datum)); + out->result.splitTuple.prefixNodeLabels = palloc_object(Datum); out->result.splitTuple.prefixNodeLabels[0] = Int16GetDatum(-2); out->result.splitTuple.childNodeN = 0; out->result.splitTuple.postfixHasPrefix = false; @@ -371,7 +370,7 @@ spg_text_picksplit(PG_FUNCTION_ARGS) } /* Extract the node label (first non-common byte) from each value */ - nodes = (spgNodePtr *) palloc(sizeof(spgNodePtr) * in->nTuples); + nodes = palloc_array(spgNodePtr, in->nTuples); for (i = 0; i < in->nTuples; i++) { @@ -394,9 +393,9 @@ spg_text_picksplit(PG_FUNCTION_ARGS) /* And emit results */ out->nNodes = 0; - out->nodeLabels = (Datum *) palloc(sizeof(Datum) * in->nTuples); - out->mapTuplesToNodes = (int *) palloc(sizeof(int) * in->nTuples); - out->leafTupleDatums = (Datum *) palloc(sizeof(Datum) * in->nTuples); + out->nodeLabels = palloc_array(Datum, in->nTuples); + out->mapTuplesToNodes = palloc_array(int, in->nTuples); + out->leafTupleDatums = palloc_array(Datum, in->nTuples); for (i = 0; i < in->nTuples; i++) { @@ -476,9 +475,9 @@ spg_text_inner_consistent(PG_FUNCTION_ARGS) * and see if it's consistent with the query. If so, emit an entry into * the output arrays. */ - out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes); - out->levelAdds = (int *) palloc(sizeof(int) * in->nNodes); - out->reconstructedValues = (Datum *) palloc(sizeof(Datum) * in->nNodes); + out->nodeNumbers = palloc_array(int, in->nNodes); + out->levelAdds = palloc_array(int, in->nNodes); + out->reconstructedValues = palloc_array(Datum, in->nNodes); out->nNodes = 0; for (i = 0; i < in->nNodes; i++) diff --git a/src/backend/access/spgist/spgutils.c b/src/backend/access/spgist/spgutils.c index 87c31da71a..a60ec85e8b 100644 --- a/src/backend/access/spgist/spgutils.c +++ b/src/backend/access/spgist/spgutils.c @@ -1177,7 +1177,7 @@ spgExtractNodeLabels(SpGistState *state, SpGistInnerTuple innerTuple) } else { - nodeLabels = (Datum *) palloc(sizeof(Datum) * innerTuple->nNodes); + nodeLabels = palloc_array(Datum, innerTuple->nNodes); SGITITERATE(innerTuple, i, node) { if (IndexTupleHasNulls(node)) diff --git a/src/backend/access/spgist/spgvacuum.c b/src/backend/access/spgist/spgvacuum.c index 71ef2e5036..cb5671c1a4 100644 --- a/src/backend/access/spgist/spgvacuum.c +++ b/src/backend/access/spgist/spgvacuum.c @@ -76,7 +76,7 @@ spgAddPendingTID(spgBulkDeleteState *bds, const ItemPointerData *tid) listLink = &pitem->next; } /* not there, so append new entry */ - pitem = (spgVacPendingItem *) palloc(sizeof(spgVacPendingItem)); + pitem = palloc_object(spgVacPendingItem); pitem->tid = *tid; pitem->done = false; pitem->next = NULL; @@ -954,7 +954,7 @@ spgbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, /* allocate stats if first time through, else re-use existing struct */ if (stats == NULL) - stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); + stats = palloc0_object(IndexBulkDeleteResult); bds.info = info; bds.stats = stats; bds.callback = callback; @@ -994,7 +994,7 @@ spgvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats) */ if (stats == NULL) { - stats = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); + stats = palloc0_object(IndexBulkDeleteResult); bds.info = info; bds.stats = stats; bds.callback = dummy_callback; diff --git a/src/backend/access/spgist/spgxlog.c b/src/backend/access/spgist/spgxlog.c index b7110302b9..f635be0698 100644 --- a/src/backend/access/spgist/spgxlog.c +++ b/src/backend/access/spgist/spgxlog.c @@ -901,7 +901,7 @@ spgRedoVacuumRedirect(XLogReaderState *record) int max = PageGetMaxOffsetNumber(page); OffsetNumber *toDelete; - toDelete = palloc(sizeof(OffsetNumber) * max); + toDelete = palloc_array(OffsetNumber, max); for (i = xldata->firstPlaceholder; i <= max; i++) toDelete[i - xldata->firstPlaceholder] = i; diff --git a/src/backend/access/tablesample/system.c b/src/backend/access/tablesample/system.c index 8db813b89f..c6740dbdd1 100644 --- a/src/backend/access/tablesample/system.c +++ b/src/backend/access/tablesample/system.c @@ -129,7 +129,7 @@ system_samplescangetsamplesize(PlannerInfo *root, static void system_initsamplescan(SampleScanState *node, int eflags) { - node->tsm_state = palloc0(sizeof(SystemSamplerData)); + node->tsm_state = palloc0_object(SystemSamplerData); } /* diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 72a4e50852..6ca3d44261 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -419,8 +419,7 @@ MultiXactIdExpand(MultiXactId multi, TransactionId xid, MultiXactStatus status) * Note we have the same race condition here as above: j could be 0 at the * end of the loop. */ - newMembers = (MultiXactMember *) - palloc(sizeof(MultiXactMember) * (nmembers + 1)); + newMembers = palloc_array(MultiXactMember, nmembers + 1); for (i = 0, j = 0; i < nmembers; i++) { diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index 94db1ec301..8428103eba 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -186,7 +186,7 @@ CreateParallelContext(const char *library_name, const char *function_name, oldcontext = MemoryContextSwitchTo(TopTransactionContext); /* Initialize a new ParallelContext. */ - pcxt = palloc0(sizeof(ParallelContext)); + pcxt = palloc0_object(ParallelContext); pcxt->subid = GetCurrentSubTransactionId(); pcxt->nworkers = nworkers; pcxt->nworkers_to_launch = nworkers; @@ -453,7 +453,7 @@ InitializeParallelDSM(ParallelContext *pcxt) clientconninfospace); /* Allocate space for worker information. */ - pcxt->worker = palloc0(sizeof(ParallelWorkerInfo) * pcxt->nworkers); + pcxt->worker = palloc0_array(ParallelWorkerInfo, pcxt->nworkers); /* * Establish error queues in dynamic shared memory. @@ -648,8 +648,7 @@ LaunchParallelWorkers(ParallelContext *pcxt) */ if (pcxt->nworkers_launched > 0) { - pcxt->known_attached_workers = - palloc0(sizeof(bool) * pcxt->nworkers_launched); + pcxt->known_attached_workers = palloc0_array(bool, pcxt->nworkers_launched); pcxt->nknown_attached_workers = 0; } diff --git a/src/backend/access/transam/timeline.c b/src/backend/access/transam/timeline.c index ec3e323ec0..b8af25e82d 100644 --- a/src/backend/access/transam/timeline.c +++ b/src/backend/access/transam/timeline.c @@ -87,7 +87,7 @@ readTimeLineHistory(TimeLineID targetTLI) /* Timeline 1 does not have a history file, so no need to check */ if (targetTLI == 1) { - entry = (TimeLineHistoryEntry *) palloc(sizeof(TimeLineHistoryEntry)); + entry = palloc_object(TimeLineHistoryEntry); entry->tli = targetTLI; entry->begin = entry->end = InvalidXLogRecPtr; return list_make1(entry); @@ -110,7 +110,7 @@ readTimeLineHistory(TimeLineID targetTLI) (errcode_for_file_access(), errmsg("could not open file \"%s\": %m", path))); /* Not there, so assume no parents */ - entry = (TimeLineHistoryEntry *) palloc(sizeof(TimeLineHistoryEntry)); + entry = palloc_object(TimeLineHistoryEntry); entry->tli = targetTLI; entry->begin = entry->end = InvalidXLogRecPtr; return list_make1(entry); @@ -175,7 +175,7 @@ readTimeLineHistory(TimeLineID targetTLI) lasttli = tli; - entry = (TimeLineHistoryEntry *) palloc(sizeof(TimeLineHistoryEntry)); + entry = palloc_object(TimeLineHistoryEntry); entry->tli = tli; entry->begin = prevend; entry->end = ((uint64) (switchpoint_hi)) << 32 | (uint64) switchpoint_lo; @@ -198,7 +198,7 @@ readTimeLineHistory(TimeLineID targetTLI) * Create one more entry for the "tip" of the timeline, which has no entry * in the history file. */ - entry = (TimeLineHistoryEntry *) palloc(sizeof(TimeLineHistoryEntry)); + entry = palloc_object(TimeLineHistoryEntry); entry->tli = targetTLI; entry->begin = prevend; entry->end = InvalidXLogRecPtr; diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index da282b71b4..ec4e3628bd 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -684,7 +684,7 @@ GetPreparedTransactionList(GlobalTransaction *gxacts) } num = TwoPhaseState->numPrepXacts; - array = (GlobalTransaction) palloc(sizeof(GlobalTransactionData) * num); + array = palloc_array(GlobalTransactionData, num); *gxacts = array; for (i = 0; i < num; i++) memcpy(array + i, TwoPhaseState->prepXacts[i], @@ -750,7 +750,7 @@ pg_prepared_xact(PG_FUNCTION_ARGS) * Collect all the 2PC status information that we will format and send * out as a result set. */ - status = (Working_State *) palloc(sizeof(Working_State)); + status = palloc_object(Working_State); funcctx->user_fctx = status; status->ngxacts = GetPreparedTransactionList(&status->array); @@ -1027,7 +1027,7 @@ save_state_data(const void *data, uint32 len) if (padlen > records.bytes_free) { - records.tail->next = palloc0(sizeof(StateFileChunk)); + records.tail->next = palloc0_object(StateFileChunk); records.tail = records.tail->next; records.tail->len = 0; records.tail->next = NULL; @@ -1062,7 +1062,7 @@ StartPrepare(GlobalTransaction gxact) SharedInvalidationMessage *invalmsgs; /* Initialize linked list */ - records.head = palloc0(sizeof(StateFileChunk)); + records.head = palloc0_object(StateFileChunk); records.head->len = 0; records.head->next = NULL; @@ -1453,7 +1453,7 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len) if (len != NULL) *len = XLogRecGetDataLen(xlogreader); - *buf = palloc(sizeof(char) * XLogRecGetDataLen(xlogreader)); + *buf = palloc_array(char, XLogRecGetDataLen(xlogreader)); memcpy(*buf, XLogRecGetData(xlogreader), sizeof(char) * XLogRecGetDataLen(xlogreader)); XLogReaderFree(xlogreader); diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index e48d4b7af6..b69d452551 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -664,7 +664,7 @@ AssignTransactionId(TransactionState s) TransactionState *parents; size_t parentOffset = 0; - parents = palloc(sizeof(TransactionState) * s->nestingLevel); + parents = palloc_array(TransactionState, s->nestingLevel); while (p != NULL && !FullTransactionIdIsValid(p->fullTransactionId)) { parents[parentOffset++] = p; diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index fb05e8e136..6a5640df51 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -4904,7 +4904,7 @@ void LocalProcessControlFile(bool reset) { Assert(reset || ControlFile == NULL); - ControlFile = palloc(sizeof(ControlFileData)); + ControlFile = palloc_object(ControlFileData); ReadControlFile(); } @@ -9133,7 +9133,7 @@ do_pg_backup_start(const char *backupidstr, bool fast, List **tablespaces, continue; } - ti = palloc(sizeof(tablespaceinfo)); + ti = palloc_object(tablespaceinfo); ti->oid = tsoid; ti->path = pstrdup(linkpath); ti->rpath = relpath; diff --git a/src/backend/access/transam/xlogfuncs.c b/src/backend/access/transam/xlogfuncs.c index a50345f9bf..339cb75c3a 100644 --- a/src/backend/access/transam/xlogfuncs.c +++ b/src/backend/access/transam/xlogfuncs.c @@ -90,7 +90,7 @@ pg_backup_start(PG_FUNCTION_ARGS) } oldcontext = MemoryContextSwitchTo(backupcontext); - backup_state = (BackupState *) palloc0(sizeof(BackupState)); + backup_state = palloc0_object(BackupState); tablespace_map = makeStringInfo(); MemoryContextSwitchTo(oldcontext); diff --git a/src/backend/access/transam/xlogprefetcher.c b/src/backend/access/transam/xlogprefetcher.c index ed3aacabc9..ccc29192c5 100644 --- a/src/backend/access/transam/xlogprefetcher.c +++ b/src/backend/access/transam/xlogprefetcher.c @@ -364,7 +364,7 @@ XLogPrefetcherAllocate(XLogReaderState *reader) XLogPrefetcher *prefetcher; HASHCTL ctl; - prefetcher = palloc0(sizeof(XLogPrefetcher)); + prefetcher = palloc0_object(XLogPrefetcher); prefetcher->reader = reader; ctl.keysize = sizeof(RelFileLocator); diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index 51dea342a4..ae2398d697 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -559,7 +559,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr, * Set the WAL reading processor now, as it will be needed when reading * the checkpoint record required (backup_label or not). */ - private = palloc0(sizeof(XLogPageReadPrivate)); + private = palloc0_object(XLogPageReadPrivate); xlogreader = XLogReaderAllocate(wal_segment_size, NULL, XL_ROUTINE(.page_read = &XLogPageRead, @@ -1416,7 +1416,7 @@ read_tablespace_map(List **tablespaces) errmsg("invalid data in file \"%s\"", TABLESPACE_MAP))); str[n++] = '\0'; - ti = palloc0(sizeof(tablespaceinfo)); + ti = palloc0_object(tablespaceinfo); errno = 0; ti->oid = strtoul(str, &endp, 10); if (*endp != '\0' || errno == EINVAL || errno == ERANGE) @@ -1467,7 +1467,7 @@ read_tablespace_map(List **tablespaces) EndOfWalRecoveryInfo * FinishWalRecovery(void) { - EndOfWalRecoveryInfo *result = palloc(sizeof(EndOfWalRecoveryInfo)); + EndOfWalRecoveryInfo *result = palloc_object(EndOfWalRecoveryInfo); XLogRecPtr lastRec; TimeLineID lastRecTLI; XLogRecPtr endOfLog; diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c index ce2a3e4214..db55c0c5bd 100644 --- a/src/backend/access/transam/xlogutils.c +++ b/src/backend/access/transam/xlogutils.c @@ -574,7 +574,7 @@ CreateFakeRelcacheEntry(RelFileLocator rlocator) Relation rel; /* Allocate the Relation struct and all related space in one block. */ - fakeentry = palloc0(sizeof(FakeRelCacheEntryData)); + fakeentry = palloc0_object(FakeRelCacheEntryData); rel = (Relation) fakeentry; rel->rd_rel = &fakeentry->pgc; diff --git a/src/backend/backup/basebackup.c b/src/backend/backup/basebackup.c index 1fbc9af72b..719a758624 100644 --- a/src/backend/backup/basebackup.c +++ b/src/backend/backup/basebackup.c @@ -262,7 +262,7 @@ perform_base_backup(basebackup_options *opt, bbsink *sink, total_checksum_failures = 0; /* Allocate backup related variables. */ - backup_state = (BackupState *) palloc0(sizeof(BackupState)); + backup_state = palloc0_object(BackupState); initStringInfo(&tablespace_map); basebackup_progress_wait_checkpoint(); @@ -289,7 +289,7 @@ perform_base_backup(basebackup_options *opt, bbsink *sink, PrepareForIncrementalBackup(ib, backup_state); /* Add a node for the base directory at the end */ - newti = palloc0(sizeof(tablespaceinfo)); + newti = palloc0_object(tablespaceinfo); newti->size = -1; state.tablespaces = lappend(state.tablespaces, newti); @@ -1206,7 +1206,7 @@ sendDir(bbsink *sink, const char *path, int basepathlen, bool sizeonly, * But we don't need it at all if this is not an incremental backup. */ if (ib != NULL) - relative_block_numbers = palloc(sizeof(BlockNumber) * RELSEG_SIZE); + relative_block_numbers = palloc_array(BlockNumber, RELSEG_SIZE); /* * Determine if the current path is a database directory that can contain diff --git a/src/backend/backup/basebackup_copy.c b/src/backend/backup/basebackup_copy.c index eb45d3bcb6..8bb8d3939f 100644 --- a/src/backend/backup/basebackup_copy.c +++ b/src/backend/backup/basebackup_copy.c @@ -107,7 +107,7 @@ static const bbsink_ops bbsink_copystream_ops = { bbsink * bbsink_copystream_new(bool send_to_client) { - bbsink_copystream *sink = palloc0(sizeof(bbsink_copystream)); + bbsink_copystream *sink = palloc0_object(bbsink_copystream); *((const bbsink_ops **) &sink->base.bbs_ops) = &bbsink_copystream_ops; sink->send_to_client = send_to_client; diff --git a/src/backend/backup/basebackup_gzip.c b/src/backend/backup/basebackup_gzip.c index c4cbb5f527..aaad834291 100644 --- a/src/backend/backup/basebackup_gzip.c +++ b/src/backend/backup/basebackup_gzip.c @@ -76,7 +76,7 @@ bbsink_gzip_new(bbsink *next, pg_compress_specification *compress) Assert((compresslevel >= 1 && compresslevel <= 9) || compresslevel == Z_DEFAULT_COMPRESSION); - sink = palloc0(sizeof(bbsink_gzip)); + sink = palloc0_object(bbsink_gzip); *((const bbsink_ops **) &sink->base.bbs_ops) = &bbsink_gzip_ops; sink->base.bbs_next = next; sink->compresslevel = compresslevel; diff --git a/src/backend/backup/basebackup_incremental.c b/src/backend/backup/basebackup_incremental.c index 852ab57704..7678e4f6ec 100644 --- a/src/backend/backup/basebackup_incremental.c +++ b/src/backend/backup/basebackup_incremental.c @@ -157,7 +157,7 @@ CreateIncrementalBackupInfo(MemoryContext mcxt) oldcontext = MemoryContextSwitchTo(mcxt); - ib = palloc0(sizeof(IncrementalBackupInfo)); + ib = palloc0_object(IncrementalBackupInfo); ib->mcxt = mcxt; initStringInfo(&ib->buf); @@ -169,7 +169,7 @@ CreateIncrementalBackupInfo(MemoryContext mcxt) */ ib->manifest_files = backup_file_create(mcxt, 10000, NULL); - context = palloc0(sizeof(JsonManifestParseContext)); + context = palloc0_object(JsonManifestParseContext); /* Parse the manifest. */ context->private_data = ib; context->version_cb = manifest_process_version; @@ -993,7 +993,7 @@ manifest_process_wal_range(JsonManifestParseContext *context, XLogRecPtr end_lsn) { IncrementalBackupInfo *ib = context->private_data; - backup_wal_range *range = palloc(sizeof(backup_wal_range)); + backup_wal_range *range = palloc_object(backup_wal_range); range->tli = tli; range->start_lsn = start_lsn; diff --git a/src/backend/backup/basebackup_lz4.c b/src/backend/backup/basebackup_lz4.c index c5ceccb846..bd5704520f 100644 --- a/src/backend/backup/basebackup_lz4.c +++ b/src/backend/backup/basebackup_lz4.c @@ -75,7 +75,7 @@ bbsink_lz4_new(bbsink *next, pg_compress_specification *compress) compresslevel = compress->level; Assert(compresslevel >= 0 && compresslevel <= 12); - sink = palloc0(sizeof(bbsink_lz4)); + sink = palloc0_object(bbsink_lz4); *((const bbsink_ops **) &sink->base.bbs_ops) = &bbsink_lz4_ops; sink->base.bbs_next = next; sink->compresslevel = compresslevel; diff --git a/src/backend/backup/basebackup_progress.c b/src/backend/backup/basebackup_progress.c index dac2059362..d783c9f573 100644 --- a/src/backend/backup/basebackup_progress.c +++ b/src/backend/backup/basebackup_progress.c @@ -62,7 +62,7 @@ bbsink_progress_new(bbsink *next, bool estimate_backup_size, bool incremental) Assert(next != NULL); - sink = palloc0(sizeof(bbsink)); + sink = palloc0_object(bbsink); *((const bbsink_ops **) &sink->bbs_ops) = &bbsink_progress_ops; sink->bbs_next = next; diff --git a/src/backend/backup/basebackup_server.c b/src/backend/backup/basebackup_server.c index 7678c6a231..0d44a148f0 100644 --- a/src/backend/backup/basebackup_server.c +++ b/src/backend/backup/basebackup_server.c @@ -59,7 +59,7 @@ static const bbsink_ops bbsink_server_ops = { bbsink * bbsink_server_new(bbsink *next, char *pathname) { - bbsink_server *sink = palloc0(sizeof(bbsink_server)); + bbsink_server *sink = palloc0_object(bbsink_server); *((const bbsink_ops **) &sink->base.bbs_ops) = &bbsink_server_ops; sink->pathname = pathname; diff --git a/src/backend/backup/basebackup_target.c b/src/backend/backup/basebackup_target.c index 84b1309d3b..8b74828aed 100644 --- a/src/backend/backup/basebackup_target.c +++ b/src/backend/backup/basebackup_target.c @@ -96,7 +96,7 @@ BaseBackupAddTarget(char *name, * name into a newly-allocated chunk of memory. */ oldcontext = MemoryContextSwitchTo(TopMemoryContext); - newtype = palloc(sizeof(BaseBackupTargetType)); + newtype = palloc_object(BaseBackupTargetType); newtype->name = pstrdup(name); newtype->check_detail = check_detail; newtype->get_sink = get_sink; @@ -132,7 +132,7 @@ BaseBackupGetTargetHandle(char *target, char *target_detail) BaseBackupTargetHandle *handle; /* Found the target. */ - handle = palloc(sizeof(BaseBackupTargetHandle)); + handle = palloc_object(BaseBackupTargetHandle); handle->type = ttype; handle->detail_arg = ttype->check_detail(target, target_detail); diff --git a/src/backend/backup/basebackup_throttle.c b/src/backend/backup/basebackup_throttle.c index b2b743238f..95746c3ea4 100644 --- a/src/backend/backup/basebackup_throttle.c +++ b/src/backend/backup/basebackup_throttle.c @@ -72,7 +72,7 @@ bbsink_throttle_new(bbsink *next, uint32 maxrate) Assert(next != NULL); Assert(maxrate > 0); - sink = palloc0(sizeof(bbsink_throttle)); + sink = palloc0_object(bbsink_throttle); *((const bbsink_ops **) &sink->base.bbs_ops) = &bbsink_throttle_ops; sink->base.bbs_next = next; diff --git a/src/backend/backup/basebackup_zstd.c b/src/backend/backup/basebackup_zstd.c index 18b2e8fb0b..647ee0eb97 100644 --- a/src/backend/backup/basebackup_zstd.c +++ b/src/backend/backup/basebackup_zstd.c @@ -70,7 +70,7 @@ bbsink_zstd_new(bbsink *next, pg_compress_specification *compress) Assert(next != NULL); - sink = palloc0(sizeof(bbsink_zstd)); + sink = palloc0_object(bbsink_zstd); *((const bbsink_ops **) &sink->base.bbs_ops) = &bbsink_zstd_ops; sink->base.bbs_next = next; sink->compress = compress; diff --git a/src/backend/backup/walsummary.c b/src/backend/backup/walsummary.c index 2689eae332..a843876337 100644 --- a/src/backend/backup/walsummary.c +++ b/src/backend/backup/walsummary.c @@ -73,7 +73,7 @@ GetWalSummaries(TimeLineID tli, XLogRecPtr start_lsn, XLogRecPtr end_lsn) continue; /* Add it to the list. */ - ws = palloc(sizeof(WalSummaryFile)); + ws = palloc_object(WalSummaryFile); ws->tli = file_tli; ws->start_lsn = file_start_lsn; ws->end_lsn = file_end_lsn; diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index fc8638c1b6..4986b1ea7e 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -742,7 +742,7 @@ populate_typ_list(void) Form_pg_type typForm = (Form_pg_type) GETSTRUCT(tup); struct typmap *newtyp; - newtyp = (struct typmap *) palloc(sizeof(struct typmap)); + newtyp = palloc_object(struct typmap); Typ = lappend(Typ, newtyp); newtyp->am_oid = typForm->oid; @@ -951,10 +951,10 @@ index_register(Oid heap, oldcxt = MemoryContextSwitchTo(nogc); - newind = (IndexList *) palloc(sizeof(IndexList)); + newind = palloc_object(IndexList); newind->il_heap = heap; newind->il_ind = ind; - newind->il_info = (IndexInfo *) palloc(sizeof(IndexInfo)); + newind->il_info = palloc_object(IndexInfo); memcpy(newind->il_info, indexInfo, sizeof(IndexInfo)); /* expressions will likely be null, but may as well copy it */ diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 8e70a85a3f..838ed26d6b 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -801,8 +801,7 @@ findDependentObjects(const ObjectAddress *object, * regression testing.) */ maxDependentObjects = 128; /* arbitrary initial allocation */ - dependentObjects = (ObjectAddressAndFlags *) - palloc(maxDependentObjects * sizeof(ObjectAddressAndFlags)); + dependentObjects = palloc_array(ObjectAddressAndFlags, maxDependentObjects); numDependentObjects = 0; ScanKeyInit(&key[0], @@ -2616,12 +2615,11 @@ new_object_addresses(void) { ObjectAddresses *addrs; - addrs = palloc(sizeof(ObjectAddresses)); + addrs = palloc_object(ObjectAddresses); addrs->numrefs = 0; addrs->maxrefs = 32; - addrs->refs = (ObjectAddress *) - palloc(addrs->maxrefs * sizeof(ObjectAddress)); + addrs->refs = palloc_array(ObjectAddress, addrs->maxrefs); addrs->extras = NULL; /* until/unless needed */ return addrs; diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index fd6537567e..265cc3e5fb 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -732,7 +732,7 @@ InsertPgAttributeTuples(Relation pg_attribute_rel, /* Initialize the number of slots to use */ nslots = Min(tupdesc->natts, (MAX_CATALOG_MULTI_INSERT_BYTES / sizeof(FormData_pg_attribute))); - slot = palloc(sizeof(TupleTableSlot *) * nslots); + slot = palloc_array(TupleTableSlot *, nslots); for (int i = 0; i < nslots; i++) slot[i] = MakeSingleTupleTableSlot(td, &TTSOpsHeapTuple); @@ -2459,7 +2459,7 @@ AddRelationNewConstraints(Relation rel, defOid = StoreAttrDefault(rel, colDef->attnum, expr, is_internal); - cooked = (CookedConstraint *) palloc(sizeof(CookedConstraint)); + cooked = palloc_object(CookedConstraint); cooked->contype = CONSTR_DEFAULT; cooked->conoid = defOid; cooked->name = NULL; @@ -2593,7 +2593,7 @@ AddRelationNewConstraints(Relation rel, numchecks++; - cooked = (CookedConstraint *) palloc(sizeof(CookedConstraint)); + cooked = palloc_object(CookedConstraint); cooked->contype = CONSTR_CHECK; cooked->conoid = constrOid; cooked->name = ccname; @@ -2669,7 +2669,7 @@ AddRelationNewConstraints(Relation rel, inhcount, cdef->is_no_inherit); - nncooked = (CookedConstraint *) palloc(sizeof(CookedConstraint)); + nncooked = palloc_object(CookedConstraint); nncooked->contype = CONSTR_NOTNULL; nncooked->conoid = constrOid; nncooked->name = nnname; diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 5d9db167e5..8dea58ad96 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -1414,7 +1414,7 @@ index_concurrently_create_copy(Relation heapRelation, Oid oldIndexId, } /* Extract opclass options for each attribute */ - opclassOptions = palloc0(sizeof(Datum) * newInfo->ii_NumIndexAttrs); + opclassOptions = palloc0_array(Datum, newInfo->ii_NumIndexAttrs); for (int i = 0; i < newInfo->ii_NumIndexAttrs; i++) opclassOptions[i] = get_attoptions(oldIndexId, i + 1); @@ -2678,9 +2678,9 @@ BuildSpeculativeIndexInfo(Relation index, IndexInfo *ii) */ Assert(ii->ii_Unique); - ii->ii_UniqueOps = (Oid *) palloc(sizeof(Oid) * indnkeyatts); - ii->ii_UniqueProcs = (Oid *) palloc(sizeof(Oid) * indnkeyatts); - ii->ii_UniqueStrats = (uint16 *) palloc(sizeof(uint16) * indnkeyatts); + ii->ii_UniqueOps = palloc_array(Oid, indnkeyatts); + ii->ii_UniqueProcs = palloc_array(Oid, indnkeyatts); + ii->ii_UniqueStrats = palloc_array(uint16, indnkeyatts); /* * We have to look up the operator's strategy number. This provides a diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index d23474da4f..c94089caa5 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -3929,7 +3929,7 @@ GetSearchPathMatcher(MemoryContext context) oldcxt = MemoryContextSwitchTo(context); - result = (SearchPathMatcher *) palloc0(sizeof(SearchPathMatcher)); + result = palloc0_object(SearchPathMatcher); schemas = list_copy(activeSearchPath); while (schemas && linitial_oid(schemas) != activeCreationNamespace) { @@ -3960,7 +3960,7 @@ CopySearchPathMatcher(SearchPathMatcher *path) { SearchPathMatcher *result; - result = (SearchPathMatcher *) palloc(sizeof(SearchPathMatcher)); + result = palloc_object(SearchPathMatcher); result->schemas = list_copy(path->schemas); result->addCatalog = path->addCatalog; result->addTemp = path->addTemp; diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index c75b7131ed..fa6c6df598 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -6144,8 +6144,8 @@ strlist_to_textarray(List *list) ALLOCSET_DEFAULT_SIZES); oldcxt = MemoryContextSwitchTo(memcxt); - datums = (Datum *) palloc(sizeof(Datum) * list_length(list)); - nulls = palloc(sizeof(bool) * list_length(list)); + datums = palloc_array(Datum, list_length(list)); + nulls = palloc_array(bool, list_length(list)); foreach(cell, list) { diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index 5b2a813230..43b4507d86 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -846,7 +846,7 @@ RelationGetNotNullConstraints(Oid relid, bool cooked, bool include_noinh) { CookedConstraint *cooked; - cooked = (CookedConstraint *) palloc(sizeof(CookedConstraint)); + cooked = palloc_object(CookedConstraint); cooked->contype = CONSTR_NOTNULL; cooked->conoid = conForm->oid; diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c index c8b11f887e..a6f63e107b 100644 --- a/src/backend/catalog/pg_depend.c +++ b/src/backend/catalog/pg_depend.c @@ -88,7 +88,7 @@ recordMultipleDependencies(const ObjectAddress *depender, */ max_slots = Min(nreferenced, MAX_CATALOG_MULTI_INSERT_BYTES / sizeof(FormData_pg_depend)); - slot = palloc(sizeof(TupleTableSlot *) * max_slots); + slot = palloc_array(TupleTableSlot *, max_slots); /* Don't open indexes unless we need to make an update */ indstate = NULL; diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c index da9c2a46cf..07998839af 100644 --- a/src/backend/catalog/pg_enum.c +++ b/src/backend/catalog/pg_enum.c @@ -120,7 +120,7 @@ EnumValuesCreate(Oid enumTypeOid, List *vals) * allocating the next), trouble could only occur if the OID counter wraps * all the way around before we finish. Which seems unlikely. */ - oids = (Oid *) palloc(num_elems * sizeof(Oid)); + oids = palloc_array(Oid, num_elems); for (elemno = 0; elemno < num_elems; elemno++) { @@ -148,7 +148,7 @@ EnumValuesCreate(Oid enumTypeOid, List *vals) /* allocate the slots to use and initialize them */ nslots = Min(num_elems, MAX_CATALOG_MULTI_INSERT_BYTES / sizeof(FormData_pg_enum)); - slot = palloc(sizeof(TupleTableSlot *) * nslots); + slot = palloc_array(TupleTableSlot *, nslots); for (int i = 0; i < nslots; i++) slot[i] = MakeSingleTupleTableSlot(RelationGetDescr(pg_enum), &TTSOpsHeapTuple); @@ -375,7 +375,7 @@ restart: nelems = list->n_members; /* Sort the existing members by enumsortorder */ - existing = (HeapTuple *) palloc(nelems * sizeof(HeapTuple)); + existing = palloc_array(HeapTuple, nelems); for (i = 0; i < nelems; i++) existing[i] = &(list->members[i]->tuple); diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index 0994220c53..be5ef5e4c0 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -1086,7 +1086,7 @@ GetPublication(Oid pubid) pubform = (Form_pg_publication) GETSTRUCT(tup); - pub = (Publication *) palloc(sizeof(Publication)); + pub = palloc_object(Publication); pub->oid = pubid; pub->name = pstrdup(NameStr(pubform->pubname)); pub->alltables = pubform->puballtables; @@ -1196,7 +1196,7 @@ pg_get_publication_tables(PG_FUNCTION_ARGS) */ foreach(lc, pub_elem_tables) { - published_rel *table_info = (published_rel *) palloc(sizeof(published_rel)); + published_rel *table_info = palloc_object(published_rel); table_info->relid = lfirst_oid(lc); table_info->pubid = pub_elem->oid; @@ -1299,7 +1299,7 @@ pg_get_publication_tables(PG_FUNCTION_ARGS) TupleDesc desc = RelationGetDescr(rel); int i; - attnums = (int16 *) palloc(desc->natts * sizeof(int16)); + attnums = palloc_array(int16, desc->natts); for (i = 0; i < desc->natts; i++) { diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c index 16e3e5c745..fe4e453667 100644 --- a/src/backend/catalog/pg_shdepend.c +++ b/src/backend/catalog/pg_shdepend.c @@ -791,7 +791,7 @@ checkSharedDependencies(Oid classId, Oid objectId, } if (!stored) { - dep = (remoteDep *) palloc(sizeof(remoteDep)); + dep = palloc_object(remoteDep); dep->dbOid = sdepForm->dbid; dep->count = 1; remDeps = lappend(remDeps, dep); @@ -913,7 +913,7 @@ copyTemplateDependencies(Oid templateDbId, Oid newDbId) * know that they will be used. */ max_slots = MAX_CATALOG_MULTI_INSERT_BYTES / sizeof(FormData_pg_shdepend); - slot = palloc(sizeof(TupleTableSlot *) * max_slots); + slot = palloc_array(TupleTableSlot *, max_slots); indstate = CatalogOpenIndexes(sdepRel); diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c index 180e77e948..ad6fbd77ff 100644 --- a/src/backend/catalog/pg_subscription.c +++ b/src/backend/catalog/pg_subscription.c @@ -89,7 +89,7 @@ GetSubscription(Oid subid, bool missing_ok) subform = (Form_pg_subscription) GETSTRUCT(tup); - sub = (Subscription *) palloc(sizeof(Subscription)); + sub = palloc_object(Subscription); sub->oid = subid; sub->dbid = subform->subdbid; sub->skiplsn = subform->subskiplsn; @@ -618,7 +618,7 @@ GetSubscriptionRelations(Oid subid, bool tables, bool sequences, relkind == RELKIND_PARTITIONED_TABLE) && !tables) continue; - relstate = (SubscriptionRelState *) palloc(sizeof(SubscriptionRelState)); + relstate = palloc_object(SubscriptionRelState); relstate->relid = subrel->srrelid; relstate->state = subrel->srsubstate; d = SysCacheGetAttr(SUBSCRIPTIONRELMAP, tup, diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c index c58e9418ac..d06c1c6817 100644 --- a/src/backend/catalog/storage.c +++ b/src/backend/catalog/storage.c @@ -707,12 +707,12 @@ smgrDoPendingDeletes(bool isCommit) if (maxrels == 0) { maxrels = 8; - srels = palloc(sizeof(SMgrRelation) * maxrels); + srels = palloc_array(SMgrRelation, maxrels); } else if (maxrels <= nrels) { maxrels *= 2; - srels = repalloc(srels, sizeof(SMgrRelation) * maxrels); + srels = repalloc_array(srels, SMgrRelation, maxrels); } srels[nrels++] = srel; @@ -829,12 +829,12 @@ smgrDoPendingSyncs(bool isCommit, bool isParallelWorker) if (maxrels == 0) { maxrels = 8; - srels = palloc(sizeof(SMgrRelation) * maxrels); + srels = palloc_array(SMgrRelation, maxrels); } else if (maxrels <= nrels) { maxrels *= 2; - srels = repalloc(srels, sizeof(SMgrRelation) * maxrels); + srels = repalloc_array(srels, SMgrRelation, maxrels); } srels[nrels++] = srel; @@ -909,7 +909,7 @@ smgrGetPendingDeletes(bool forCommit, RelFileLocator **ptr) *ptr = NULL; return 0; } - rptr = (RelFileLocator *) palloc(nrels * sizeof(RelFileLocator)); + rptr = palloc_array(RelFileLocator, nrels); *ptr = rptr; for (pending = pendingDeletes; pending != NULL; pending = pending->next) { diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index b242917067..5e2a7a8234 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -1079,7 +1079,7 @@ examine_attribute(Relation onerel, int attnum, Node *index_expr) /* * Create the VacAttrStats struct. */ - stats = (VacAttrStats *) palloc0(sizeof(VacAttrStats)); + stats = palloc0_object(VacAttrStats); stats->attstattarget = attstattarget; /* @@ -1910,7 +1910,7 @@ std_typanalyze(VacAttrStats *stats) NULL); /* Save the operator info for compute_stats routines */ - mystats = (StdAnalyzeData *) palloc(sizeof(StdAnalyzeData)); + mystats = palloc_object(StdAnalyzeData); mystats->eqopr = eqopr; mystats->eqfunc = OidIsValid(eqopr) ? get_opcode(eqopr) : InvalidOid; mystats->ltopr = ltopr; @@ -2865,7 +2865,7 @@ compute_scalar_stats(VacAttrStatsP stats, /* Must copy the target values into anl_context */ old_context = MemoryContextSwitchTo(stats->anl_context); - corrs = (float4 *) palloc(sizeof(float4)); + corrs = palloc_object(float4); MemoryContextSwitchTo(old_context); /*---------- diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index d1e772efb7..2120c85ccb 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -1672,7 +1672,7 @@ get_tables_to_cluster(MemoryContext cluster_context) /* Use a permanent memory context for the result list */ old_context = MemoryContextSwitchTo(cluster_context); - rtc = (RelToCluster *) palloc(sizeof(RelToCluster)); + rtc = palloc_object(RelToCluster); rtc->tableOid = index->indrelid; rtc->indexOid = index->indexrelid; rtcs = lappend(rtcs, rtc); @@ -1726,7 +1726,7 @@ get_tables_to_cluster_partitioned(MemoryContext cluster_context, Oid indexOid) /* Use a permanent memory context for the result list */ old_context = MemoryContextSwitchTo(cluster_context); - rtc = (RelToCluster *) palloc(sizeof(RelToCluster)); + rtc = palloc_object(RelToCluster); rtc->tableOid = relid; rtc->indexOid = indexrelid; rtcs = lappend(rtcs, rtc); diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 28e878c368..6454a39a01 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -561,7 +561,7 @@ ProcessCopyOptions(ParseState *pstate, /* Support external use for option sanity checking */ if (opts_out == NULL) - opts_out = (CopyFormatOptions *) palloc0(sizeof(CopyFormatOptions)); + opts_out = palloc0_object(CopyFormatOptions); opts_out->file_encoding = -1; diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index 12781963b4..2ae3d2ba86 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -364,7 +364,7 @@ CopyMultiInsertBufferInit(ResultRelInfo *rri) { CopyMultiInsertBuffer *buffer; - buffer = (CopyMultiInsertBuffer *) palloc(sizeof(CopyMultiInsertBuffer)); + buffer = palloc_object(CopyMultiInsertBuffer); memset(buffer->slots, 0, sizeof(TupleTableSlot *) * MAX_BUFFERED_TUPLES); buffer->resultRelInfo = rri; buffer->bistate = (rri->ri_FdwRoutine == NULL) ? GetBulkInsertState() : NULL; @@ -1558,7 +1558,7 @@ BeginCopyFrom(ParseState *pstate, }; /* Allocate workspace and zero all fields */ - cstate = (CopyFromStateData *) palloc0(sizeof(CopyFromStateData)); + cstate = palloc0_object(CopyFromStateData); /* * We allocate everything used by a cstate in a new memory context. This diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c index cef452584e..dae91630ac 100644 --- a/src/backend/commands/copyto.c +++ b/src/backend/commands/copyto.c @@ -720,7 +720,7 @@ BeginCopyTo(ParseState *pstate, /* Allocate workspace and zero all fields */ - cstate = (CopyToStateData *) palloc0(sizeof(CopyToStateData)); + cstate = palloc0_object(CopyToStateData); /* * We allocate everything used by a cstate in a new memory context. This @@ -1527,7 +1527,7 @@ copy_dest_destroy(DestReceiver *self) DestReceiver * CreateCopyDestReceiver(void) { - DR_copy *self = (DR_copy *) palloc(sizeof(DR_copy)); + DR_copy *self = palloc_object(DR_copy); self->pub.receiveSlot = copy_dest_receive; self->pub.rStartup = copy_dest_startup; diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c index 1ccc2e55c6..ddc45e3aa0 100644 --- a/src/backend/commands/createas.c +++ b/src/backend/commands/createas.c @@ -439,7 +439,7 @@ CreateTableAsRelExists(CreateTableAsStmt *ctas) DestReceiver * CreateIntoRelDestReceiver(IntoClause *intoClause) { - DR_intorel *self = (DR_intorel *) palloc0(sizeof(DR_intorel)); + DR_intorel *self = palloc0_object(DR_intorel); self->pub.receiveSlot = intorel_receive; self->pub.rStartup = intorel_startup; diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index da85cd2d43..d1f3be89b3 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -431,7 +431,7 @@ ScanSourceDatabasePgClassTuple(HeapTupleData *tuple, Oid tbid, Oid dbid, classForm->oid); /* Prepare a rel info element and add it to the list. */ - relinfo = (CreateDBRelInfo *) palloc(sizeof(CreateDBRelInfo)); + relinfo = palloc_object(CreateDBRelInfo); if (OidIsValid(classForm->reltablespace)) relinfo->rlocator.spcOid = classForm->reltablespace; else diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index f34868da5a..e718230813 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -364,7 +364,7 @@ filter_list_to_array(List *filterlist) int i = 0, l = list_length(filterlist); - data = (Datum *) palloc(l * sizeof(Datum)); + data = palloc_array(Datum, l); foreach(lc, filterlist) { @@ -1286,7 +1286,7 @@ EventTriggerSQLDropAddObject(const ObjectAddress *object, bool original, bool no oldcxt = MemoryContextSwitchTo(currentEventTriggerState->cxt); - obj = palloc0(sizeof(SQLDropObject)); + obj = palloc0_object(SQLDropObject); obj->address = *object; obj->original = original; obj->normal = normal; @@ -1726,7 +1726,7 @@ EventTriggerCollectSimpleCommand(ObjectAddress address, oldcxt = MemoryContextSwitchTo(currentEventTriggerState->cxt); - command = palloc(sizeof(CollectedCommand)); + command = palloc_object(CollectedCommand); command->type = SCT_Simple; command->in_extension = creating_extension; @@ -1762,7 +1762,7 @@ EventTriggerAlterTableStart(Node *parsetree) oldcxt = MemoryContextSwitchTo(currentEventTriggerState->cxt); - command = palloc(sizeof(CollectedCommand)); + command = palloc_object(CollectedCommand); command->type = SCT_AlterTable; command->in_extension = creating_extension; @@ -1818,7 +1818,7 @@ EventTriggerCollectAlterTableSubcmd(Node *subcmd, ObjectAddress address) oldcxt = MemoryContextSwitchTo(currentEventTriggerState->cxt); - newsub = palloc(sizeof(CollectedATSubcmd)); + newsub = palloc_object(CollectedATSubcmd); newsub->address = address; newsub->parsetree = copyObject(subcmd); @@ -1892,7 +1892,7 @@ EventTriggerCollectGrant(InternalGrant *istmt) /* * This is tedious, but necessary. */ - icopy = palloc(sizeof(InternalGrant)); + icopy = palloc_object(InternalGrant); memcpy(icopy, istmt, sizeof(InternalGrant)); icopy->objects = list_copy(istmt->objects); icopy->grantees = list_copy(istmt->grantees); @@ -1901,7 +1901,7 @@ EventTriggerCollectGrant(InternalGrant *istmt) icopy->col_privs = lappend(icopy->col_privs, copyObject(lfirst(cell))); /* Now collect it, using the copied InternalGrant */ - command = palloc(sizeof(CollectedCommand)); + command = palloc_object(CollectedCommand); command->type = SCT_Grant; command->in_extension = creating_extension; command->d.grant.istmt = icopy; @@ -1932,7 +1932,7 @@ EventTriggerCollectAlterOpFam(AlterOpFamilyStmt *stmt, Oid opfamoid, oldcxt = MemoryContextSwitchTo(currentEventTriggerState->cxt); - command = palloc(sizeof(CollectedCommand)); + command = palloc_object(CollectedCommand); command->type = SCT_AlterOpFamily; command->in_extension = creating_extension; ObjectAddressSet(command->d.opfam.address, @@ -1965,7 +1965,7 @@ EventTriggerCollectCreateOpClass(CreateOpClassStmt *stmt, Oid opcoid, oldcxt = MemoryContextSwitchTo(currentEventTriggerState->cxt); - command = palloc0(sizeof(CollectedCommand)); + command = palloc0_object(CollectedCommand); command->type = SCT_CreateOpClass; command->in_extension = creating_extension; ObjectAddressSet(command->d.createopc.address, @@ -1999,12 +1999,12 @@ EventTriggerCollectAlterTSConfig(AlterTSConfigurationStmt *stmt, Oid cfgId, oldcxt = MemoryContextSwitchTo(currentEventTriggerState->cxt); - command = palloc0(sizeof(CollectedCommand)); + command = palloc0_object(CollectedCommand); command->type = SCT_AlterTSConfig; command->in_extension = creating_extension; ObjectAddressSet(command->d.atscfg.address, TSConfigRelationId, cfgId); - command->d.atscfg.dictIds = palloc(sizeof(Oid) * ndicts); + command->d.atscfg.dictIds = palloc_array(Oid, ndicts); memcpy(command->d.atscfg.dictIds, dictIds, sizeof(Oid) * ndicts); command->d.atscfg.ndicts = ndicts; command->parsetree = (Node *) copyObject(stmt); @@ -2033,7 +2033,7 @@ EventTriggerCollectAlterDefPrivs(AlterDefaultPrivilegesStmt *stmt) oldcxt = MemoryContextSwitchTo(currentEventTriggerState->cxt); - command = palloc0(sizeof(CollectedCommand)); + command = palloc0_object(CollectedCommand); command->type = SCT_AlterDefaultPrivileges; command->d.defprivs.objtype = stmt->action->objtype; command->in_extension = creating_extension; diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 7e699f8595..5a6390631e 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -4980,7 +4980,7 @@ ExplainCreateWorkersState(int num_workers) { ExplainWorkersState *wstate; - wstate = (ExplainWorkersState *) palloc(sizeof(ExplainWorkersState)); + wstate = palloc_object(ExplainWorkersState); wstate->num_workers = num_workers; wstate->worker_inited = (bool *) palloc0(num_workers * sizeof(bool)); wstate->worker_str = (StringInfoData *) diff --git a/src/backend/commands/explain_dr.c b/src/backend/commands/explain_dr.c index 95685d7e88..5833aa80fb 100644 --- a/src/backend/commands/explain_dr.c +++ b/src/backend/commands/explain_dr.c @@ -276,7 +276,7 @@ CreateExplainSerializeDestReceiver(ExplainState *es) { SerializeDestReceiver *self; - self = (SerializeDestReceiver *) palloc0(sizeof(SerializeDestReceiver)); + self = palloc0_object(SerializeDestReceiver); self->pub.receiveSlot = serializeAnalyzeReceive; self->pub.rStartup = serializeAnalyzeStartup; diff --git a/src/backend/commands/explain_state.c b/src/backend/commands/explain_state.c index dae256809d..a6623f8fa5 100644 --- a/src/backend/commands/explain_state.c +++ b/src/backend/commands/explain_state.c @@ -60,7 +60,7 @@ static int ExplainExtensionOptionsAllocated = 0; ExplainState * NewExplainState(void) { - ExplainState *es = (ExplainState *) palloc0(sizeof(ExplainState)); + ExplainState *es = palloc0_object(ExplainState); /* Set default options (most fields can be left as zeroes). */ es->costs = true; @@ -294,10 +294,7 @@ SetExplainExtensionState(ExplainState *es, int extension_id, void *opaque) int i; i = pg_nextpower2_32(extension_id + 1); - es->extension_state = (void **) - repalloc0(es->extension_state, - es->extension_state_allocated * sizeof(void *), - i * sizeof(void *)); + es->extension_state = repalloc0_array(es->extension_state, void *, es->extension_state_allocated, i); es->extension_state_allocated = i; } diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index ebc204c446..c43b74e319 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -724,7 +724,7 @@ read_extension_aux_control_file(const ExtensionControlFile *pcontrol, /* * Flat-copy the struct. Pointer fields share values with original. */ - acontrol = (ExtensionControlFile *) palloc(sizeof(ExtensionControlFile)); + acontrol = palloc_object(ExtensionControlFile); memcpy(acontrol, pcontrol, sizeof(ExtensionControlFile)); /* @@ -1349,7 +1349,7 @@ get_ext_ver_info(const char *versionname, List **evi_list) return evi; } - evi = (ExtensionVersionInfo *) palloc(sizeof(ExtensionVersionInfo)); + evi = palloc_object(ExtensionVersionInfo); evi->name = pstrdup(versionname); evi->reachable = NIL; evi->installable = false; diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 59d00638ee..8a435cd93d 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -913,7 +913,7 @@ interpret_AS_clause(Oid languageOid, const char *languageName, { SQLFunctionParseInfoPtr pinfo; - pinfo = (SQLFunctionParseInfoPtr) palloc0(sizeof(SQLFunctionParseInfo)); + pinfo = palloc0_object(SQLFunctionParseInfo); pinfo->fname = funcname; pinfo->nargs = list_length(parameterTypes); diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index a5c579ce11..a1fd4cab35 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -463,7 +463,7 @@ refresh_matview_datafill(DestReceiver *dest, Query *query, DestReceiver * CreateTransientRelDestReceiver(Oid transientoid) { - DR_transientrel *self = (DR_transientrel *) palloc0(sizeof(DR_transientrel)); + DR_transientrel *self = palloc0_object(DR_transientrel); self->pub.receiveSlot = transientrel_receive; self->pub.rStartup = transientrel_startup; @@ -713,7 +713,7 @@ refresh_by_match_merge(Oid matviewOid, Oid tempOid, Oid relowner, * include all rows. */ tupdesc = matviewRel->rd_att; - opUsedForQual = (Oid *) palloc0(sizeof(Oid) * relnatts); + opUsedForQual = palloc0_array(Oid, relnatts); foundUniqueIndex = false; indexoidlist = RelationGetIndexList(matviewRel); diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c index a6dd8eab51..992ae789b0 100644 --- a/src/backend/commands/opclasscmds.c +++ b/src/backend/commands/opclasscmds.c @@ -523,7 +523,7 @@ DefineOpClass(CreateOpClassStmt *stmt) #endif /* Save the info */ - member = (OpFamilyMember *) palloc0(sizeof(OpFamilyMember)); + member = palloc0_object(OpFamilyMember); member->is_func = false; member->object = operOid; member->number = item->number; @@ -547,7 +547,7 @@ DefineOpClass(CreateOpClassStmt *stmt) get_func_name(funcOid)); #endif /* Save the info */ - member = (OpFamilyMember *) palloc0(sizeof(OpFamilyMember)); + member = palloc0_object(OpFamilyMember); member->is_func = true; member->object = funcOid; member->number = item->number; @@ -940,7 +940,7 @@ AlterOpFamilyAdd(AlterOpFamilyStmt *stmt, Oid amoid, Oid opfamilyoid, #endif /* Save the info */ - member = (OpFamilyMember *) palloc0(sizeof(OpFamilyMember)); + member = palloc0_object(OpFamilyMember); member->is_func = false; member->object = operOid; member->number = item->number; @@ -970,7 +970,7 @@ AlterOpFamilyAdd(AlterOpFamilyStmt *stmt, Oid amoid, Oid opfamilyoid, #endif /* Save the info */ - member = (OpFamilyMember *) palloc0(sizeof(OpFamilyMember)); + member = palloc0_object(OpFamilyMember); member->is_func = true; member->object = funcOid; member->number = item->number; @@ -1058,7 +1058,7 @@ AlterOpFamilyDrop(AlterOpFamilyStmt *stmt, Oid amoid, Oid opfamilyoid, item->number, maxOpNumber))); processTypesSpec(item->class_args, &lefttype, &righttype); /* Save the info */ - member = (OpFamilyMember *) palloc0(sizeof(OpFamilyMember)); + member = palloc0_object(OpFamilyMember); member->is_func = false; member->number = item->number; member->lefttype = lefttype; @@ -1074,7 +1074,7 @@ AlterOpFamilyDrop(AlterOpFamilyStmt *stmt, Oid amoid, Oid opfamilyoid, item->number, maxProcNumber))); processTypesSpec(item->class_args, &lefttype, &righttype); /* Save the info */ - member = (OpFamilyMember *) palloc0(sizeof(OpFamilyMember)); + member = palloc0_object(OpFamilyMember); member->is_func = true; member->number = item->number; member->lefttype = lefttype; diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c index 83056960fe..5bd5f8c996 100644 --- a/src/backend/commands/policy.c +++ b/src/backend/commands/policy.c @@ -144,7 +144,7 @@ policy_role_list_to_array(List *roles, int *num_roles) if (roles == NIL) { *num_roles = 1; - role_oids = (Datum *) palloc(*num_roles * sizeof(Datum)); + role_oids = palloc_array(Datum, *num_roles); role_oids[0] = ObjectIdGetDatum(ACL_ID_PUBLIC); return role_oids; @@ -471,7 +471,7 @@ RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id) * Ordinarily there'd be exactly one, but we must cope with duplicate * mentions, since CREATE/ALTER POLICY historically have allowed that. */ - role_oids = (Datum *) palloc(num_roles * sizeof(Datum)); + role_oids = palloc_array(Datum, num_roles); for (i = 0, j = 0; i < num_roles; i++) { if (roles[i] != roleid) @@ -945,7 +945,7 @@ AlterPolicy(AlterPolicyStmt *stmt) nitems = ARR_DIMS(policy_roles)[0]; - role_oids = (Datum *) palloc(nitems * sizeof(Datum)); + role_oids = palloc_array(Datum, nitems); for (i = 0; i < nitems; i++) role_oids[i] = ObjectIdGetDatum(roles[i]); diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index 1faf3a8c37..a198350895 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -1345,7 +1345,7 @@ AlterPublicationTables(AlterPublicationStmt *stmt, HeapTuple tup, */ if (!found) { - oldrel = palloc(sizeof(PublicationRelInfo)); + oldrel = palloc_object(PublicationRelInfo); oldrel->whereClause = NULL; oldrel->columns = NIL; oldrel->relation = table_open(oldrelid, @@ -1757,7 +1757,7 @@ OpenTableList(List *tables) continue; } - pub_rel = palloc(sizeof(PublicationRelInfo)); + pub_rel = palloc_object(PublicationRelInfo); pub_rel->relation = rel; pub_rel->whereClause = t->whereClause; pub_rel->columns = t->columns; @@ -1826,7 +1826,7 @@ OpenTableList(List *tables) /* find_all_inheritors already got lock */ rel = table_open(childrelid, NoLock); - pub_rel = palloc(sizeof(PublicationRelInfo)); + pub_rel = palloc_object(PublicationRelInfo); pub_rel->relation = rel; /* child inherits WHERE clause from parent */ pub_rel->whereClause = t->whereClause; diff --git a/src/backend/commands/seclabel.c b/src/backend/commands/seclabel.c index cee5d7bbb9..07bed6e148 100644 --- a/src/backend/commands/seclabel.c +++ b/src/backend/commands/seclabel.c @@ -573,7 +573,7 @@ register_label_provider(const char *provider_name, check_object_relabel_type hoo MemoryContext oldcxt; oldcxt = MemoryContextSwitchTo(TopMemoryContext); - provider = palloc(sizeof(LabelProvider)); + provider = palloc_object(LabelProvider); provider->provider_name = pstrdup(provider_name); provider->hook = hook; label_provider_list = lappend(label_provider_list, provider); diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 8c856af349..abbcaff083 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -566,7 +566,7 @@ publicationListToArray(List *publist) ALLOCSET_DEFAULT_SIZES); oldcxt = MemoryContextSwitchTo(memcxt); - datums = (Datum *) palloc(sizeof(Datum) * list_length(publist)); + datums = palloc_array(Datum, list_length(publist)); check_duplicates_in_publist(publist, datums); @@ -1055,7 +1055,7 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data, { char state; XLogRecPtr statelsn; - SubRemoveRels *remove_rel = palloc(sizeof(SubRemoveRels)); + SubRemoveRels *remove_rel = palloc_object(SubRemoveRels); /* * Lock pg_subscription_rel with AccessExclusiveLock to diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 07e5b95782..1c9ef53be2 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -999,7 +999,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId, Assert(colDef->cooked_default == NULL); - rawEnt = (RawColumnDefault *) palloc(sizeof(RawColumnDefault)); + rawEnt = palloc_object(RawColumnDefault); rawEnt->attnum = attnum; rawEnt->raw_default = colDef->raw_default; rawEnt->generated = colDef->generated; @@ -1009,7 +1009,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId, { CookedConstraint *cooked; - cooked = (CookedConstraint *) palloc(sizeof(CookedConstraint)); + cooked = palloc_object(CookedConstraint); cooked->contype = CONSTR_DEFAULT; cooked->conoid = InvalidOid; /* until created */ cooked->name = NULL; @@ -6568,7 +6568,7 @@ ATGetQueueEntry(List **wqueue, Relation rel) * Not there, so add it. Note that we make a copy of the relation's * existing descriptor before anything interesting can happen to it. */ - tab = (AlteredTableInfo *) palloc0(sizeof(AlteredTableInfo)); + tab = palloc0_object(AlteredTableInfo); tab->relid = relid; tab->rel = NULL; /* set later */ tab->relkind = rel->rd_rel->relkind; @@ -7406,7 +7406,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, { RawColumnDefault *rawEnt; - rawEnt = (RawColumnDefault *) palloc(sizeof(RawColumnDefault)); + rawEnt = palloc_object(RawColumnDefault); rawEnt->attnum = attribute->attnum; rawEnt->raw_default = copyObject(colDef->raw_default); rawEnt->generated = colDef->generated; @@ -7507,7 +7507,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, defval = expression_planner(defval); /* Add the new default to the newvals list */ - newval = (NewColumnValue *) palloc0(sizeof(NewColumnValue)); + newval = palloc0_object(NewColumnValue); newval->attnum = attribute->attnum; newval->expr = defval; newval->is_generated = (colDef->generated != '\0'); @@ -8176,7 +8176,7 @@ ATExecColumnDefault(Relation rel, const char *colName, /* SET DEFAULT */ RawColumnDefault *rawEnt; - rawEnt = (RawColumnDefault *) palloc(sizeof(RawColumnDefault)); + rawEnt = palloc_object(RawColumnDefault); rawEnt->attnum = attnum; rawEnt->raw_default = newDefault; rawEnt->generated = '\0'; @@ -8704,7 +8704,7 @@ ATExecSetExpression(AlteredTableInfo *tab, Relation rel, const char *colName, false, false); /* Prepare to store the new expression, in the catalogs */ - rawEnt = (RawColumnDefault *) palloc(sizeof(RawColumnDefault)); + rawEnt = palloc_object(RawColumnDefault); rawEnt->attnum = attnum; rawEnt->raw_default = newExpr; rawEnt->generated = attgenerated; @@ -8721,7 +8721,7 @@ ATExecSetExpression(AlteredTableInfo *tab, Relation rel, const char *colName, /* Prepare for table rewrite */ defval = (Expr *) build_column_default(rel, attnum); - newval = (NewColumnValue *) palloc0(sizeof(NewColumnValue)); + newval = palloc0_object(NewColumnValue); newval->attnum = attnum; newval->expr = expression_planner(defval); newval->is_generated = true; @@ -9949,7 +9949,7 @@ ATAddCheckNNConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel, { NewConstraint *newcon; - newcon = (NewConstraint *) palloc0(sizeof(NewConstraint)); + newcon = palloc0_object(NewConstraint); newcon->name = ccon->name; newcon->contype = ccon->contype; newcon->qual = ccon->expr; @@ -10946,7 +10946,7 @@ addFkRecurseReferenced(Constraint *fkconstraint, Relation rel, false); if (map) { - mapped_pkattnum = palloc(sizeof(AttrNumber) * numfks); + mapped_pkattnum = palloc_array(AttrNumber, numfks); for (int j = 0; j < numfks; j++) mapped_pkattnum[j] = map->attnums[pkattnum[j] - 1]; } @@ -11081,7 +11081,7 @@ addFkRecurseReferencing(List **wqueue, Constraint *fkconstraint, Relation rel, tab = ATGetQueueEntry(wqueue, rel); - newcon = (NewConstraint *) palloc0(sizeof(NewConstraint)); + newcon = palloc0_object(NewConstraint); newcon->name = get_constraint_name(parentConstr); newcon->contype = CONSTR_FOREIGN; newcon->refrelid = RelationGetRelid(pkrel); @@ -12503,7 +12503,7 @@ ATExecAlterConstrEnforceability(List **wqueue, ATAlterConstraint *cmdcon, AlteredTableInfo *tab; NewConstraint *newcon; - newcon = (NewConstraint *) palloc0(sizeof(NewConstraint)); + newcon = palloc0_object(NewConstraint); newcon->name = fkconstraint->conname; newcon->contype = CONSTR_FOREIGN; newcon->refrelid = currcon->confrelid; @@ -13019,7 +13019,7 @@ QueueFKConstraintValidation(List **wqueue, Relation conrel, Relation fkrel, /* for now this is all we need */ fkconstraint->conname = pstrdup(NameStr(con->conname)); - newcon = (NewConstraint *) palloc0(sizeof(NewConstraint)); + newcon = palloc0_object(NewConstraint); newcon->name = fkconstraint->conname; newcon->contype = CONSTR_FOREIGN; newcon->refrelid = con->confrelid; @@ -13167,7 +13167,7 @@ QueueCheckConstraintValidation(List **wqueue, Relation conrel, Relation rel, } /* Queue validation for phase 3 */ - newcon = (NewConstraint *) palloc0(sizeof(NewConstraint)); + newcon = palloc0_object(NewConstraint); newcon->name = constrName; newcon->contype = CONSTR_CHECK; newcon->refrelid = InvalidOid; @@ -14522,7 +14522,7 @@ ATPrepAlterColumnType(List **wqueue, * Add a work queue item to make ATRewriteTable update the column * contents. */ - newval = (NewColumnValue *) palloc0(sizeof(NewColumnValue)); + newval = palloc0_object(NewColumnValue); newval->attnum = attnum; newval->expr = (Expr *) transform; newval->is_generated = false; @@ -19262,7 +19262,7 @@ register_on_commit_action(Oid relid, OnCommitAction action) oldcxt = MemoryContextSwitchTo(CacheMemoryContext); - oc = (OnCommitItem *) palloc(sizeof(OnCommitItem)); + oc = palloc_object(OnCommitItem); oc->relid = relid; oc->oncommit = action; oc->creating_subid = GetCurrentSubTransactionId(); @@ -20575,8 +20575,8 @@ AttachPartitionEnsureIndexes(List **wqueue, Relation rel, Relation attachrel) idxes = RelationGetIndexList(rel); attachRelIdxs = RelationGetIndexList(attachrel); - attachrelIdxRels = palloc(sizeof(Relation) * list_length(attachRelIdxs)); - attachInfos = palloc(sizeof(IndexInfo *) * list_length(attachRelIdxs)); + attachrelIdxRels = palloc_array(Relation, list_length(attachRelIdxs)); + attachInfos = palloc_array(IndexInfo *, list_length(attachRelIdxs)); /* Build arrays of all existing indexes and their IndexInfos */ foreach_oid(cldIdxId, attachRelIdxs) diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 579ac8d76a..12c97f2c02 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -1991,7 +1991,7 @@ RelationBuildTriggers(Relation relation) } /* Build trigdesc */ - trigdesc = (TriggerDesc *) palloc0(sizeof(TriggerDesc)); + trigdesc = palloc0_object(TriggerDesc); trigdesc->triggers = triggers; trigdesc->numtriggers = numtrigs; for (i = 0; i < numtrigs; i++) @@ -2096,7 +2096,7 @@ CopyTriggerDesc(TriggerDesc *trigdesc) if (trigdesc == NULL || trigdesc->numtriggers <= 0) return NULL; - newdesc = (TriggerDesc *) palloc(sizeof(TriggerDesc)); + newdesc = palloc_object(TriggerDesc); memcpy(newdesc, trigdesc, sizeof(TriggerDesc)); trigger = (Trigger *) palloc(trigdesc->numtriggers * sizeof(Trigger)); @@ -4901,7 +4901,7 @@ GetAfterTriggersTableData(Oid relid, CmdType cmdType) oldcxt = MemoryContextSwitchTo(CurTransactionContext); - table = (AfterTriggersTableData *) palloc0(sizeof(AfterTriggersTableData)); + table = palloc0_object(AfterTriggersTableData); table->relid = relid; table->cmdType = cmdType; qs->tables = lappend(qs->tables, table); @@ -5050,7 +5050,7 @@ MakeTransitionCaptureState(TriggerDesc *trigdesc, Oid relid, CmdType cmdType) MemoryContextSwitchTo(oldcxt); /* Now build the TransitionCaptureState struct, in caller's context */ - state = (TransitionCaptureState *) palloc0(sizeof(TransitionCaptureState)); + state = palloc0_object(TransitionCaptureState); state->tcs_delete_old_table = need_old_del; state->tcs_update_old_table = need_old_upd; state->tcs_update_new_table = need_new_upd; diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c index dc7df736fb..ec4580e17c 100644 --- a/src/backend/commands/tsearchcmds.c +++ b/src/backend/commands/tsearchcmds.c @@ -1027,7 +1027,7 @@ DefineTSConfiguration(List *names, List *parameters, ObjectAddress *copied) * know that they will be used. */ max_slots = MAX_CATALOG_MULTI_INSERT_BYTES / sizeof(FormData_pg_ts_config_map); - slot = palloc(sizeof(TupleTableSlot *) * max_slots); + slot = palloc_array(TupleTableSlot *, max_slots); ScanKeyInit(&skey, Anum_pg_ts_config_map_mapcfg, @@ -1261,7 +1261,7 @@ getTokenTypes(Oid prsId, List *tokennames) { if (strcmp(strVal(val), list[j].alias) == 0) { - TSTokenTypeItem *ts = (TSTokenTypeItem *) palloc0(sizeof(TSTokenTypeItem)); + TSTokenTypeItem *ts = palloc0_object(TSTokenTypeItem); ts->num = list[j].lexid; ts->name = pstrdup(strVal(val)); @@ -1344,7 +1344,7 @@ MakeConfigurationMapping(AlterTSConfigurationStmt *stmt, * Convert list of dictionary names to array of dict OIDs */ ndict = list_length(stmt->dicts); - dictIds = (Oid *) palloc(sizeof(Oid) * ndict); + dictIds = palloc_array(Oid, ndict); i = 0; foreach(c, stmt->dicts) { @@ -1432,7 +1432,7 @@ MakeConfigurationMapping(AlterTSConfigurationStmt *stmt, /* Allocate the slots to use and initialize them */ nslots = Min(ntoken * ndict, MAX_CATALOG_MULTI_INSERT_BYTES / sizeof(FormData_pg_ts_config_map)); - slot = palloc(sizeof(TupleTableSlot *) * nslots); + slot = palloc_array(TupleTableSlot *, nslots); for (i = 0; i < nslots; i++) slot[i] = MakeSingleTupleTableSlot(RelationGetDescr(relMap), &TTSOpsHeapTuple); diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 47d5047fe8..0eb8e0a2bb 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -3447,10 +3447,10 @@ get_rels_with_domain(Oid domainOid, LOCKMODE lockmode) } /* Build the RelToCheck entry with enough space for all atts */ - rtc = (RelToCheck *) palloc(sizeof(RelToCheck)); + rtc = palloc_object(RelToCheck); rtc->rel = rel; rtc->natts = 0; - rtc->atts = (int *) palloc(sizeof(int) * RelationGetNumberOfAttributes(rel)); + rtc->atts = palloc_array(int, RelationGetNumberOfAttributes(rel)); result = lappend(result, rtc); } diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index 6ae42ea565..ef4de1e7fd 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -1904,7 +1904,7 @@ AddRoleMems(Oid currentUserId, const char *rolename, Oid roleid, else { Oid objectId; - Oid *newmembers = palloc(sizeof(Oid)); + Oid *newmembers = palloc_object(Oid); /* * The values for these options can be taken directly from 'popt'. @@ -2295,7 +2295,7 @@ initialize_revoke_actions(CatCList *memlist) if (memlist->n_members == 0) return NULL; - result = palloc(sizeof(RevokeRoleGrantAction) * memlist->n_members); + result = palloc_array(RevokeRoleGrantAction, memlist->n_members); for (i = 0; i < memlist->n_members; i++) result[i] = RRG_NOOP; return result; diff --git a/src/backend/commands/vacuumparallel.c b/src/backend/commands/vacuumparallel.c index 0feea1d30e..8a37c08871 100644 --- a/src/backend/commands/vacuumparallel.c +++ b/src/backend/commands/vacuumparallel.c @@ -268,7 +268,7 @@ parallel_vacuum_init(Relation rel, Relation *indrels, int nindexes, /* * Compute the number of parallel vacuum workers to launch */ - will_parallel_vacuum = (bool *) palloc0(sizeof(bool) * nindexes); + will_parallel_vacuum = palloc0_array(bool, nindexes); parallel_workers = parallel_vacuum_compute_workers(indrels, nindexes, nrequested_workers, will_parallel_vacuum); @@ -279,7 +279,7 @@ parallel_vacuum_init(Relation rel, Relation *indrels, int nindexes, return NULL; } - pvs = (ParallelVacuumState *) palloc0(sizeof(ParallelVacuumState)); + pvs = palloc0_object(ParallelVacuumState); pvs->indrels = indrels; pvs->nindexes = nindexes; pvs->will_parallel_vacuum = will_parallel_vacuum; @@ -444,7 +444,7 @@ parallel_vacuum_end(ParallelVacuumState *pvs, IndexBulkDeleteResult **istats) if (indstats->istat_updated) { - istats[i] = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); + istats[i] = palloc0_object(IndexBulkDeleteResult); memcpy(istats[i], &indstats->istat, sizeof(IndexBulkDeleteResult)); } else diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index b05ff476a6..c35744b105 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -1312,7 +1312,7 @@ ExecInitExprRec(Expr *node, ExprState *state, } /* Set up the primary fmgr lookup information */ - finfo = palloc0(sizeof(FmgrInfo)); + finfo = palloc0_object(FmgrInfo); fcinfo = palloc0(SizeForFunctionCallInfo(2)); fmgr_info(cmpfuncid, finfo); fmgr_info_set_expr((Node *) node, finfo); @@ -1388,7 +1388,7 @@ ExecInitExprRec(Expr *node, ExprState *state, /* allocate scratch memory used by all steps of AND/OR */ if (boolexpr->boolop != NOT_EXPR) - scratch.d.boolexpr.anynull = (bool *) palloc(sizeof(bool)); + scratch.d.boolexpr.anynull = palloc_object(bool); /* * For each argument evaluate the argument itself, then @@ -1521,11 +1521,11 @@ ExecInitExprRec(Expr *node, ExprState *state, ReleaseTupleDesc(tupDesc); /* create workspace for column values */ - values = (Datum *) palloc(sizeof(Datum) * ncolumns); - nulls = (bool *) palloc(sizeof(bool) * ncolumns); + values = palloc_array(Datum, ncolumns); + nulls = palloc_array(bool, ncolumns); /* create shared composite-type-lookup cache struct */ - rowcachep = palloc(sizeof(ExprEvalRowtypeCache)); + rowcachep = palloc_object(ExprEvalRowtypeCache); rowcachep->cacheptr = NULL; /* emit code to evaluate the composite input value */ @@ -1634,7 +1634,7 @@ ExecInitExprRec(Expr *node, ExprState *state, scratch.opcode = EEOP_IOCOERCE_SAFE; /* lookup the source type's output function */ - scratch.d.iocoerce.finfo_out = palloc0(sizeof(FmgrInfo)); + scratch.d.iocoerce.finfo_out = palloc0_object(FmgrInfo); scratch.d.iocoerce.fcinfo_data_out = palloc0(SizeForFunctionCallInfo(1)); getTypeOutputInfo(exprType((Node *) iocoerce->arg), @@ -1646,7 +1646,7 @@ ExecInitExprRec(Expr *node, ExprState *state, 1, InvalidOid, NULL, NULL); /* lookup the result type's input function */ - scratch.d.iocoerce.finfo_in = palloc0(sizeof(FmgrInfo)); + scratch.d.iocoerce.finfo_in = palloc0_object(FmgrInfo); scratch.d.iocoerce.fcinfo_data_in = palloc0(SizeForFunctionCallInfo(3)); getTypeInputInfo(iocoerce->resulttype, @@ -1699,8 +1699,8 @@ ExecInitExprRec(Expr *node, ExprState *state, elemstate->parent = state->parent; elemstate->ext_params = state->ext_params; - elemstate->innermost_caseval = (Datum *) palloc(sizeof(Datum)); - elemstate->innermost_casenull = (bool *) palloc(sizeof(bool)); + elemstate->innermost_caseval = palloc_object(Datum); + elemstate->innermost_casenull = palloc_object(bool); ExecInitExprRec(acoerce->elemexpr, elemstate, &elemstate->resvalue, &elemstate->resnull); @@ -1727,8 +1727,7 @@ ExecInitExprRec(Expr *node, ExprState *state, if (elemstate) { /* Set up workspace for array_map */ - scratch.d.arraycoerce.amstate = - (ArrayMapState *) palloc0(sizeof(ArrayMapState)); + scratch.d.arraycoerce.amstate = palloc0_object(ArrayMapState); } else { @@ -1783,8 +1782,8 @@ ExecInitExprRec(Expr *node, ExprState *state, if (caseExpr->arg != NULL) { /* Evaluate testexpr into caseval/casenull workspace */ - caseval = palloc(sizeof(Datum)); - casenull = palloc(sizeof(bool)); + caseval = palloc_object(Datum); + casenull = palloc_object(bool); ExecInitExprRec(caseExpr->arg, state, caseval, casenull); @@ -1930,9 +1929,9 @@ ExecInitExprRec(Expr *node, ExprState *state, */ scratch.opcode = EEOP_ARRAYEXPR; scratch.d.arrayexpr.elemvalues = - (Datum *) palloc(sizeof(Datum) * nelems); + palloc_array(Datum, nelems); scratch.d.arrayexpr.elemnulls = - (bool *) palloc(sizeof(bool) * nelems); + palloc_array(bool, nelems); scratch.d.arrayexpr.nelems = nelems; /* fill remaining fields of step */ @@ -2006,9 +2005,9 @@ ExecInitExprRec(Expr *node, ExprState *state, /* space for the individual field datums */ scratch.d.row.elemvalues = - (Datum *) palloc(sizeof(Datum) * nelems); + palloc_array(Datum, nelems); scratch.d.row.elemnulls = - (bool *) palloc(sizeof(bool) * nelems); + palloc_array(bool, nelems); /* as explained above, make sure any extra columns are null */ memset(scratch.d.row.elemnulls, true, sizeof(bool) * nelems); @@ -2109,7 +2108,7 @@ ExecInitExprRec(Expr *node, ExprState *state, BTORDER_PROC, lefttype, righttype, opfamily); /* Set up the primary fmgr lookup information */ - finfo = palloc0(sizeof(FmgrInfo)); + finfo = palloc0_object(FmgrInfo); fcinfo = palloc0(SizeForFunctionCallInfo(2)); fmgr_info(proc, finfo); fmgr_info_set_expr((Node *) node, finfo); @@ -2252,7 +2251,7 @@ ExecInitExprRec(Expr *node, ExprState *state, */ /* Perform function lookup */ - finfo = palloc0(sizeof(FmgrInfo)); + finfo = palloc0_object(FmgrInfo); fcinfo = palloc0(SizeForFunctionCallInfo(2)); fmgr_info(typentry->cmp_proc, finfo); fmgr_info_set_expr((Node *) node, finfo); @@ -2261,10 +2260,8 @@ ExecInitExprRec(Expr *node, ExprState *state, scratch.opcode = EEOP_MINMAX; /* allocate space to store arguments */ - scratch.d.minmax.values = - (Datum *) palloc(sizeof(Datum) * nelems); - scratch.d.minmax.nulls = - (bool *) palloc(sizeof(bool) * nelems); + scratch.d.minmax.values = palloc_array(Datum, nelems); + scratch.d.minmax.nulls = palloc_array(bool, nelems); scratch.d.minmax.nelems = nelems; scratch.d.minmax.op = minmaxexpr->op; @@ -2313,10 +2310,8 @@ ExecInitExprRec(Expr *node, ExprState *state, /* allocate space for storing all the arguments */ if (nnamed) { - scratch.d.xmlexpr.named_argvalue = - (Datum *) palloc(sizeof(Datum) * nnamed); - scratch.d.xmlexpr.named_argnull = - (bool *) palloc(sizeof(bool) * nnamed); + scratch.d.xmlexpr.named_argvalue = palloc_array(Datum, nnamed); + scratch.d.xmlexpr.named_argnull = palloc_array(bool, nnamed); } else { @@ -2326,10 +2321,8 @@ ExecInitExprRec(Expr *node, ExprState *state, if (nargs) { - scratch.d.xmlexpr.argvalue = - (Datum *) palloc(sizeof(Datum) * nargs); - scratch.d.xmlexpr.argnull = - (bool *) palloc(sizeof(bool) * nargs); + scratch.d.xmlexpr.argvalue = palloc_array(Datum, nargs); + scratch.d.xmlexpr.argnull = palloc_array(bool, nargs); } else { @@ -2398,15 +2391,15 @@ ExecInitExprRec(Expr *node, ExprState *state, { JsonConstructorExprState *jcstate; - jcstate = palloc0(sizeof(JsonConstructorExprState)); + jcstate = palloc0_object(JsonConstructorExprState); scratch.opcode = EEOP_JSON_CONSTRUCTOR; scratch.d.json_constructor.jcstate = jcstate; jcstate->constructor = ctor; - jcstate->arg_values = (Datum *) palloc(sizeof(Datum) * nargs); - jcstate->arg_nulls = (bool *) palloc(sizeof(bool) * nargs); - jcstate->arg_types = (Oid *) palloc(sizeof(Oid) * nargs); + jcstate->arg_values = palloc_array(Datum, nargs); + jcstate->arg_nulls = palloc_array(bool, nargs); + jcstate->arg_types = palloc_array(Oid, nargs); jcstate->nargs = nargs; foreach(lc, args) @@ -2680,7 +2673,7 @@ ExprEvalPushStep(ExprState *es, const ExprEvalStep *s) if (es->steps_alloc == 0) { es->steps_alloc = 16; - es->steps = palloc(sizeof(ExprEvalStep) * es->steps_alloc); + es->steps = palloc_array(ExprEvalStep, es->steps_alloc); } else if (es->steps_alloc == es->steps_len) { @@ -2732,7 +2725,7 @@ ExecInitFunc(ExprEvalStep *scratch, Expr *node, List *args, Oid funcid, FUNC_MAX_ARGS))); /* Allocate function lookup data and parameter workspace for this call */ - scratch->d.func.finfo = palloc0(sizeof(FmgrInfo)); + scratch->d.func.finfo = palloc0_object(FmgrInfo); scratch->d.func.fcinfo_data = palloc0(SizeForFunctionCallInfo(nargs)); flinfo = scratch->d.func.finfo; fcinfo = scratch->d.func.fcinfo_data; @@ -3557,8 +3550,7 @@ ExecInitCoerceToDomain(ExprEvalStep *scratch, CoerceToDomain *ctest, * during executor initialization. That means we don't need typcache.c to * provide compiled exprs. */ - constraint_ref = (DomainConstraintRef *) - palloc(sizeof(DomainConstraintRef)); + constraint_ref = palloc_object(DomainConstraintRef); InitDomainConstraintRef(ctest->resulttype, constraint_ref, CurrentMemoryContext, @@ -3588,9 +3580,9 @@ ExecInitCoerceToDomain(ExprEvalStep *scratch, CoerceToDomain *ctest, if (scratch->d.domaincheck.checkvalue == NULL) { scratch->d.domaincheck.checkvalue = - (Datum *) palloc(sizeof(Datum)); + palloc_object(Datum); scratch->d.domaincheck.checknull = - (bool *) palloc(sizeof(bool)); + palloc_object(bool); } /* @@ -3608,8 +3600,8 @@ ExecInitCoerceToDomain(ExprEvalStep *scratch, CoerceToDomain *ctest, ExprEvalStep scratch2 = {0}; /* Yes, so make output workspace for MAKE_READONLY */ - domainval = (Datum *) palloc(sizeof(Datum)); - domainnull = (bool *) palloc(sizeof(bool)); + domainval = palloc_object(Datum); + domainnull = palloc_object(bool); /* Emit MAKE_READONLY */ scratch2.opcode = EEOP_MAKE_READONLY; @@ -4159,7 +4151,7 @@ ExecBuildHash32FromAttrs(TupleDesc desc, const TupleTableSlotOps *ops, * one column to hash or an initial value plus one column. */ if ((int64) numCols + (init_value != 0) > 1) - iresult = palloc(sizeof(NullableDatum)); + iresult = palloc_object(NullableDatum); /* find the highest attnum so we deform the tuple to that point */ for (int i = 0; i < numCols; i++) @@ -4325,7 +4317,7 @@ ExecBuildHash32Expr(TupleDesc desc, const TupleTableSlotOps *ops, * than one expression to hash or an initial value plus one expression. */ if ((int64) num_exprs + (init_value != 0) > 1) - iresult = palloc(sizeof(NullableDatum)); + iresult = palloc_object(NullableDatum); if (init_value == 0) { @@ -4371,7 +4363,7 @@ ExecBuildHash32Expr(TupleDesc desc, const TupleTableSlotOps *ops, funcid = hashfunc_oids[i]; /* Allocate hash function lookup data. */ - finfo = palloc0(sizeof(FmgrInfo)); + finfo = palloc0_object(FmgrInfo); fcinfo = palloc0(SizeForFunctionCallInfo(1)); fmgr_info(funcid, finfo); @@ -4540,7 +4532,7 @@ ExecBuildGroupingEqual(TupleDesc ldesc, TupleDesc rdesc, InvokeFunctionExecuteHook(foid); /* Set up the primary fmgr lookup information */ - finfo = palloc0(sizeof(FmgrInfo)); + finfo = palloc0_object(FmgrInfo); fcinfo = palloc0(SizeForFunctionCallInfo(2)); fmgr_info(foid, finfo); fmgr_info_set_expr(NULL, finfo); @@ -4676,7 +4668,7 @@ ExecBuildParamSetEqual(TupleDesc desc, InvokeFunctionExecuteHook(foid); /* Set up the primary fmgr lookup information */ - finfo = palloc0(sizeof(FmgrInfo)); + finfo = palloc0_object(FmgrInfo); fcinfo = palloc0(SizeForFunctionCallInfo(2)); fmgr_info(foid, finfo); fmgr_info_set_expr(NULL, finfo); @@ -4749,7 +4741,7 @@ ExecInitJsonExpr(JsonExpr *jsexpr, ExprState *state, Datum *resv, bool *resnull, ExprEvalStep *scratch) { - JsonExprState *jsestate = palloc0(sizeof(JsonExprState)); + JsonExprState *jsestate = palloc0_object(JsonExprState); ListCell *argexprlc; ListCell *argnamelc; List *jumps_return_null = NIL; @@ -4800,7 +4792,7 @@ ExecInitJsonExpr(JsonExpr *jsexpr, ExprState *state, { Expr *argexpr = (Expr *) lfirst(argexprlc); String *argname = lfirst_node(String, argnamelc); - JsonPathVariable *var = palloc(sizeof(*var)); + JsonPathVariable *var = palloc_object(JsonPathVariable); var->name = argname->sval; var->namelen = strlen(var->name); @@ -4874,7 +4866,7 @@ ExecInitJsonExpr(JsonExpr *jsexpr, ExprState *state, FunctionCallInfo fcinfo; getTypeInputInfo(jsexpr->returning->typid, &typinput, &typioparam); - finfo = palloc0(sizeof(FmgrInfo)); + finfo = palloc0_object(FmgrInfo); fcinfo = palloc0(SizeForFunctionCallInfo(3)); fmgr_info(typinput, finfo); fmgr_info_set_expr((Node *) jsexpr->returning, finfo); diff --git a/src/backend/executor/execGrouping.c b/src/backend/executor/execGrouping.c index 8b64a625ca..8eb4c25e1c 100644 --- a/src/backend/executor/execGrouping.c +++ b/src/backend/executor/execGrouping.c @@ -224,7 +224,7 @@ BuildTupleHashTable(PlanState *parent, oldcontext = MemoryContextSwitchTo(metacxt); - hashtable = (TupleHashTable) palloc(sizeof(TupleHashTableData)); + hashtable = palloc_object(TupleHashTableData); hashtable->numCols = numCols; hashtable->keyColIdx = keyColIdx; diff --git a/src/backend/executor/execIndexing.c b/src/backend/executor/execIndexing.c index dd323c9b9f..0b3a31f170 100644 --- a/src/backend/executor/execIndexing.c +++ b/src/backend/executor/execIndexing.c @@ -188,8 +188,8 @@ ExecOpenIndices(ResultRelInfo *resultRelInfo, bool speculative) /* * allocate space for result arrays */ - relationDescs = (RelationPtr) palloc(len * sizeof(Relation)); - indexInfoArray = (IndexInfo **) palloc(len * sizeof(IndexInfo *)); + relationDescs = palloc_array(Relation, len); + indexInfoArray = palloc_array(IndexInfo *, len); resultRelInfo->ri_NumIndices = len; resultRelInfo->ri_IndexRelationDescs = relationDescs; diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 27c9eec697..797d8b1ca1 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -189,7 +189,7 @@ standard_ExecutorStart(QueryDesc *queryDesc, int eflags) nParamExec = list_length(queryDesc->plannedstmt->paramExecTypes); estate->es_param_exec_vals = (ParamExecData *) - palloc0(nParamExec * sizeof(ParamExecData)); + palloc0_array(ParamExecData, nParamExec); } /* We now require all callers to provide sourceText */ @@ -876,7 +876,7 @@ InitPlan(QueryDesc *queryDesc, int eflags) if (plannedstmt->rowMarks) { estate->es_rowmarks = (ExecRowMark **) - palloc0(estate->es_range_table_size * sizeof(ExecRowMark *)); + palloc0_array(ExecRowMark *, estate->es_range_table_size); foreach(l, plannedstmt->rowMarks) { PlanRowMark *rc = (PlanRowMark *) lfirst(l); @@ -920,7 +920,7 @@ InitPlan(QueryDesc *queryDesc, int eflags) if (relation) CheckValidRowMarkRel(relation, rc->markType); - erm = (ExecRowMark *) palloc(sizeof(ExecRowMark)); + erm = palloc_object(ExecRowMark); erm->relation = relation; erm->relid = relid; erm->rti = rc->rti; @@ -1262,9 +1262,9 @@ InitResultRelInfo(ResultRelInfo *resultRelInfo, int n = resultRelInfo->ri_TrigDesc->numtriggers; resultRelInfo->ri_TrigFunctions = (FmgrInfo *) - palloc0(n * sizeof(FmgrInfo)); + palloc0_array(FmgrInfo, n); resultRelInfo->ri_TrigWhenExprs = (ExprState **) - palloc0(n * sizeof(ExprState *)); + palloc0_array(ExprState *, n); if (instrument_options) resultRelInfo->ri_TrigInstrument = InstrAlloc(n, instrument_options, false); } @@ -2578,7 +2578,7 @@ ExecFindRowMark(EState *estate, Index rti, bool missing_ok) ExecAuxRowMark * ExecBuildAuxRowMark(ExecRowMark *erm, List *targetlist) { - ExecAuxRowMark *aerm = (ExecAuxRowMark *) palloc0(sizeof(ExecAuxRowMark)); + ExecAuxRowMark *aerm = palloc0_object(ExecAuxRowMark); char resname[32]; aerm->rowmark = erm; @@ -2734,8 +2734,7 @@ EvalPlanQualInit(EPQState *epqstate, EState *parentestate, * EvalPlanQualBegin(). */ epqstate->tuple_table = NIL; - epqstate->relsubs_slot = (TupleTableSlot **) - palloc0(rtsize * sizeof(TupleTableSlot *)); + epqstate->relsubs_slot = palloc0_array(TupleTableSlot *, rtsize); /* ... and remember data that EvalPlanQualBegin will need */ epqstate->plan = subplan; @@ -3074,8 +3073,7 @@ EvalPlanQualStart(EPQState *epqstate, Plan *planTree) /* now make the internal param workspace ... */ i = list_length(parentestate->es_plannedstmt->paramExecTypes); - rcestate->es_param_exec_vals = (ParamExecData *) - palloc0(i * sizeof(ParamExecData)); + rcestate->es_param_exec_vals = palloc0_array(ParamExecData, i); /* ... and copy down all values, whether really needed or not */ while (--i >= 0) { @@ -3130,8 +3128,7 @@ EvalPlanQualStart(EPQState *epqstate, Plan *planTree) * EvalPlanQualFetchRowMark() can efficiently access the to be fetched * rowmark. */ - epqstate->relsubs_rowmark = (ExecAuxRowMark **) - palloc0(rtsize * sizeof(ExecAuxRowMark *)); + epqstate->relsubs_rowmark = palloc0_array(ExecAuxRowMark *, rtsize); foreach(l, epqstate->arowMarks) { ExecAuxRowMark *earm = (ExecAuxRowMark *) lfirst(l); diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index 0125464d94..26200c5a3d 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -647,7 +647,7 @@ ExecInitParallelPlan(PlanState *planstate, EState *estate, ExecSetParamPlanMulti(sendParams, GetPerTupleExprContext(estate)); /* Allocate object for return value. */ - pei = palloc0(sizeof(ParallelExecutorInfo)); + pei = palloc0_object(ParallelExecutorInfo); pei->finished = false; pei->planstate = planstate; diff --git a/src/backend/executor/execReplication.c b/src/backend/executor/execReplication.c index def32774c9..860f79f9cc 100644 --- a/src/backend/executor/execReplication.c +++ b/src/backend/executor/execReplication.c @@ -221,7 +221,7 @@ retry: if (!isIdxSafeToSkipDuplicates) { if (eq == NULL) - eq = palloc0(sizeof(*eq) * outslot->tts_tupleDescriptor->natts); + eq = palloc0_array(TypeCacheEntry *, outslot->tts_tupleDescriptor->natts); if (!tuples_equal(outslot, searchslot, eq, NULL)) continue; @@ -378,7 +378,7 @@ RelationFindReplTupleSeq(Relation rel, LockTupleMode lockmode, Assert(equalTupleDescs(desc, outslot->tts_tupleDescriptor)); - eq = palloc0(sizeof(*eq) * outslot->tts_tupleDescriptor->natts); + eq = palloc0_array(TypeCacheEntry *, outslot->tts_tupleDescriptor->natts); /* Start a heap scan. */ InitDirtySnapshot(snap); @@ -593,7 +593,7 @@ RelationFindDeletedTupleInfoSeq(Relation rel, TupleTableSlot *searchslot, indexbitmap = RelationGetIndexAttrBitmap(rel, INDEX_ATTR_BITMAP_PRIMARY_KEY); - eq = palloc0(sizeof(*eq) * searchslot->tts_tupleDescriptor->natts); + eq = palloc0_array(TypeCacheEntry *, searchslot->tts_tupleDescriptor->natts); /* * Start a heap scan using SnapshotAny to identify dead tuples that are @@ -679,7 +679,7 @@ RelationFindDeletedTupleInfoByIndex(Relation rel, Oid idxoid, if (!isIdxSafeToSkipDuplicates) { if (eq == NULL) - eq = palloc0(sizeof(*eq) * scanslot->tts_tupleDescriptor->natts); + eq = palloc0_array(TypeCacheEntry *, scanslot->tts_tupleDescriptor->natts); if (!tuples_equal(scanslot, searchslot, eq, NULL)) continue; diff --git a/src/backend/executor/execTuples.c b/src/backend/executor/execTuples.c index 8e02d68824..b0dc2cfa66 100644 --- a/src/backend/executor/execTuples.c +++ b/src/backend/executor/execTuples.c @@ -2283,7 +2283,7 @@ TupleDescGetAttInMetadata(TupleDesc tupdesc) int32 *atttypmods; AttInMetadata *attinmeta; - attinmeta = (AttInMetadata *) palloc(sizeof(AttInMetadata)); + attinmeta = palloc_object(AttInMetadata); /* "Bless" the tupledesc so that we can make rowtype datums with it */ attinmeta->tupdesc = BlessTupleDesc(tupdesc); @@ -2447,7 +2447,7 @@ begin_tup_output_tupdesc(DestReceiver *dest, { TupOutputState *tstate; - tstate = (TupOutputState *) palloc(sizeof(TupOutputState)); + tstate = palloc_object(TupOutputState); tstate->slot = MakeSingleTupleTableSlot(tupdesc, tts_ops); tstate->dest = dest; diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 630d708d2a..d9cc723daa 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -256,7 +256,7 @@ prepare_sql_fn_parse_info(HeapTuple procedureTuple, Form_pg_proc procedureStruct = (Form_pg_proc) GETSTRUCT(procedureTuple); int nargs; - pinfo = (SQLFunctionParseInfoPtr) palloc0(sizeof(SQLFunctionParseInfo)); + pinfo = (SQLFunctionParseInfoPtr) palloc0_object(SQLFunctionParseInfo); /* Function's name (only) can be used to qualify argument names */ pinfo->fname = pstrdup(NameStr(procedureStruct->proname)); @@ -2616,7 +2616,7 @@ get_sql_fn_result_tlist(List *queryTreeList) DestReceiver * CreateSQLFunctionDestReceiver(void) { - DR_sqlfunction *self = (DR_sqlfunction *) palloc0(sizeof(DR_sqlfunction)); + DR_sqlfunction *self = palloc0_object(DR_sqlfunction); self->pub.receiveSlot = sqlfunction_receive; self->pub.rStartup = sqlfunction_startup; diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 0b02fd3210..a18556f62e 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -1920,7 +1920,7 @@ hash_agg_enter_spill_mode(AggState *aggstate) aggstate->hash_tapeset = LogicalTapeSetCreate(true, NULL, -1); - aggstate->hash_spills = palloc(sizeof(HashAggSpill) * aggstate->num_hashes); + aggstate->hash_spills = palloc_array(HashAggSpill, aggstate->num_hashes); for (int setno = 0; setno < aggstate->num_hashes; setno++) { @@ -2999,9 +2999,9 @@ hashagg_spill_init(HashAggSpill *spill, LogicalTapeSet *tapeset, int used_bits, } #endif - spill->partitions = palloc0(sizeof(LogicalTape *) * npartitions); - spill->ntuples = palloc0(sizeof(int64) * npartitions); - spill->hll_card = palloc0(sizeof(hyperLogLogState) * npartitions); + spill->partitions = palloc0_array(LogicalTape *, npartitions); + spill->ntuples = palloc0_array(int64, npartitions); + spill->hll_card = palloc0_array(hyperLogLogState, npartitions); for (int i = 0; i < npartitions; i++) spill->partitions[i] = LogicalTapeCreate(tapeset); @@ -3097,7 +3097,7 @@ static HashAggBatch * hashagg_batch_new(LogicalTape *input_tape, int setno, int64 input_tuples, double input_card, int used_bits) { - HashAggBatch *batch = palloc0(sizeof(HashAggBatch)); + HashAggBatch *batch = palloc0_object(HashAggBatch); batch->setno = setno; batch->used_bits = used_bits; @@ -3368,8 +3368,7 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) aggstate->maxsets = numGroupingSets; aggstate->numphases = numPhases; - aggstate->aggcontexts = (ExprContext **) - palloc0(sizeof(ExprContext *) * numGroupingSets); + aggstate->aggcontexts = palloc0_array(ExprContext *, numGroupingSets); /* * Create expression contexts. We need three or more, one for @@ -3492,15 +3491,15 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) * For each phase, prepare grouping set data and fmgr lookup data for * compare functions. Accumulate all_grouped_cols in passing. */ - aggstate->phases = palloc0(numPhases * sizeof(AggStatePerPhaseData)); + aggstate->phases = palloc0_array(AggStatePerPhaseData, numPhases); aggstate->num_hashes = numHashes; if (numHashes) { - aggstate->perhash = palloc0(sizeof(AggStatePerHashData) * numHashes); + aggstate->perhash = palloc0_array(AggStatePerHashData, numHashes); aggstate->phases[0].numsets = 0; - aggstate->phases[0].gset_lengths = palloc(numHashes * sizeof(int)); - aggstate->phases[0].grouped_cols = palloc(numHashes * sizeof(Bitmapset *)); + aggstate->phases[0].gset_lengths = palloc_array(int, numHashes); + aggstate->phases[0].grouped_cols = palloc_array(Bitmapset *, numHashes); } phase = 0; @@ -3598,8 +3597,7 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) * Build a separate function for each subset of columns that * need to be compared. */ - phasedata->eqfunctions = - (ExprState **) palloc0(aggnode->numCols * sizeof(ExprState *)); + phasedata->eqfunctions = palloc0_array(ExprState *, aggnode->numCols); /* for each grouping set */ for (int k = 0; k < phasedata->numsets; k++) @@ -3655,27 +3653,24 @@ ExecInitAgg(Agg *node, EState *estate, int eflags) * allocate my private per-agg working storage */ econtext = aggstate->ss.ps.ps_ExprContext; - econtext->ecxt_aggvalues = (Datum *) palloc0(sizeof(Datum) * numaggs); - econtext->ecxt_aggnulls = (bool *) palloc0(sizeof(bool) * numaggs); + econtext->ecxt_aggvalues = palloc0_array(Datum, numaggs); + econtext->ecxt_aggnulls = palloc0_array(bool, numaggs); - peraggs = (AggStatePerAgg) palloc0(sizeof(AggStatePerAggData) * numaggs); - pertransstates = (AggStatePerTrans) palloc0(sizeof(AggStatePerTransData) * numtrans); + peraggs = palloc0_array(AggStatePerAggData, numaggs); + pertransstates = palloc0_array(AggStatePerTransData, numtrans); aggstate->peragg = peraggs; aggstate->pertrans = pertransstates; - aggstate->all_pergroups = - (AggStatePerGroup *) palloc0(sizeof(AggStatePerGroup) - * (numGroupingSets + numHashes)); + aggstate->all_pergroups = palloc0_array(AggStatePerGroup, numGroupingSets + numHashes); pergroups = aggstate->all_pergroups; if (node->aggstrategy != AGG_HASHED) { for (i = 0; i < numGroupingSets; i++) { - pergroups[i] = (AggStatePerGroup) palloc0(sizeof(AggStatePerGroupData) - * numaggs); + pergroups[i] = palloc0_array(AggStatePerGroupData, numaggs); } aggstate->pergroups = pergroups; @@ -4375,8 +4370,7 @@ build_pertrans_for_aggref(AggStatePerTrans pertrans, pfree(ops); } - pertrans->sortstates = (Tuplesortstate **) - palloc0(sizeof(Tuplesortstate *) * numGroupingSets); + pertrans->sortstates = palloc0_array(Tuplesortstate *, numGroupingSets); } diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c index a11b36c717..77c4dd9e4b 100644 --- a/src/backend/executor/nodeAppend.c +++ b/src/backend/executor/nodeAppend.c @@ -263,7 +263,7 @@ ExecInitAppend(Append *node, EState *estate, int eflags) { AsyncRequest *areq; - areq = palloc(sizeof(AsyncRequest)); + areq = palloc_object(AsyncRequest); areq->requestor = (PlanState *) appendstate; areq->requestee = appendplanstates[i]; areq->request_index = i; diff --git a/src/backend/executor/nodeFunctionscan.c b/src/backend/executor/nodeFunctionscan.c index 644363582d..af75dd8fc5 100644 --- a/src/backend/executor/nodeFunctionscan.c +++ b/src/backend/executor/nodeFunctionscan.c @@ -333,7 +333,7 @@ ExecInitFunctionScan(FunctionScan *node, EState *estate, int eflags) */ ExecAssignExprContext(estate, &scanstate->ss.ps); - scanstate->funcstates = palloc(nfuncs * sizeof(FunctionScanPerFuncState)); + scanstate->funcstates = palloc_array(FunctionScanPerFuncState, nfuncs); natts = 0; i = 0; diff --git a/src/backend/executor/nodeGatherMerge.c b/src/backend/executor/nodeGatherMerge.c index 93f3dbc6cf..c04522fea4 100644 --- a/src/backend/executor/nodeGatherMerge.c +++ b/src/backend/executor/nodeGatherMerge.c @@ -145,8 +145,7 @@ ExecInitGatherMerge(GatherMerge *node, EState *estate, int eflags) int i; gm_state->gm_nkeys = node->numCols; - gm_state->gm_sortkeys = - palloc0(sizeof(SortSupportData) * node->numCols); + gm_state->gm_sortkeys = palloc0_array(SortSupportData, node->numCols); for (i = 0; i < node->numCols; i++) { @@ -418,8 +417,7 @@ gather_merge_setup(GatherMergeState *gm_state) for (i = 0; i < nreaders; i++) { /* Allocate the tuple array with length MAX_TUPLE_STORE */ - gm_state->gm_tuple_buffers[i].tuple = - (MinimalTuple *) palloc0(sizeof(MinimalTuple) * MAX_TUPLE_STORE); + gm_state->gm_tuple_buffers[i].tuple = palloc0_array(MinimalTuple, MAX_TUPLE_STORE); /* Initialize tuple slot for worker */ gm_state->gm_slots[i + 1] = diff --git a/src/backend/executor/nodeHashjoin.c b/src/backend/executor/nodeHashjoin.c index 5661ad7683..cc50bee19e 100644 --- a/src/backend/executor/nodeHashjoin.c +++ b/src/backend/executor/nodeHashjoin.c @@ -899,7 +899,7 @@ ExecInitHashJoin(HashJoin *node, EState *estate, int eflags) */ if (OidIsValid(hash->skewTable)) { - hashstate->skew_hashfunction = palloc0(sizeof(FmgrInfo)); + hashstate->skew_hashfunction = palloc0_object(FmgrInfo); hashstate->skew_collation = linitial_oid(node->hashcollations); fmgr_info(outer_hashfuncid[0], hashstate->skew_hashfunction); } @@ -1541,8 +1541,7 @@ ExecReScanHashJoin(HashJoinState *node) /* accumulate stats from old hash table, if wanted */ /* (this should match ExecShutdownHash) */ if (hashNode->ps.instrument && !hashNode->hinstrument) - hashNode->hinstrument = (HashInstrumentation *) - palloc0(sizeof(HashInstrumentation)); + hashNode->hinstrument = palloc0_object(HashInstrumentation); if (hashNode->hinstrument) ExecHashAccumInstrumentation(hashNode->hinstrument, hashNode->hashtable); diff --git a/src/backend/executor/nodeIndexonlyscan.c b/src/backend/executor/nodeIndexonlyscan.c index f464cca950..6bea42f128 100644 --- a/src/backend/executor/nodeIndexonlyscan.c +++ b/src/backend/executor/nodeIndexonlyscan.c @@ -693,8 +693,7 @@ ExecInitIndexOnlyScan(IndexOnlyScan *node, EState *estate, int eflags) * Now create an array to mark the attribute numbers of the keys that * need to be converted from cstring to name. */ - indexstate->ioss_NameCStringAttNums = (AttrNumber *) - palloc(sizeof(AttrNumber) * namecount); + indexstate->ioss_NameCStringAttNums = palloc_array(AttrNumber, namecount); for (int attnum = 0; attnum < indnkeyatts; attnum++) { diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c index f36929deec..72b135e5dc 100644 --- a/src/backend/executor/nodeIndexscan.c +++ b/src/backend/executor/nodeIndexscan.c @@ -466,12 +466,10 @@ reorderqueue_push(IndexScanState *node, TupleTableSlot *slot, ReorderTuple *rt; int i; - rt = (ReorderTuple *) palloc(sizeof(ReorderTuple)); + rt = palloc_object(ReorderTuple); rt->htup = ExecCopySlotHeapTuple(slot); - rt->orderbyvals = - (Datum *) palloc(sizeof(Datum) * scandesc->numberOfOrderBys); - rt->orderbynulls = - (bool *) palloc(sizeof(bool) * scandesc->numberOfOrderBys); + rt->orderbyvals = palloc_array(Datum, scandesc->numberOfOrderBys); + rt->orderbynulls = palloc_array(bool, scandesc->numberOfOrderBys); for (i = 0; i < node->iss_NumOrderByKeys; i++) { if (!orderbynulls[i]) diff --git a/src/backend/executor/nodeMemoize.c b/src/backend/executor/nodeMemoize.c index d652663cb6..7444391e8a 100644 --- a/src/backend/executor/nodeMemoize.c +++ b/src/backend/executor/nodeMemoize.c @@ -555,7 +555,7 @@ cache_lookup(MemoizeState *mstate, bool *found) oldcontext = MemoryContextSwitchTo(mstate->tableContext); /* Allocate a new key */ - entry->key = key = (MemoizeKey *) palloc(sizeof(MemoizeKey)); + entry->key = key = palloc_object(MemoizeKey); key->params = ExecCopySlotMinimalTuple(mstate->probeslot); /* Update the total cache memory utilization */ @@ -634,7 +634,7 @@ cache_store_tuple(MemoizeState *mstate, TupleTableSlot *slot) oldcontext = MemoryContextSwitchTo(mstate->tableContext); - tuple = (MemoizeTuple *) palloc(sizeof(MemoizeTuple)); + tuple = palloc_object(MemoizeTuple); tuple->mintuple = ExecCopySlotMinimalTuple(slot); tuple->next = NULL; diff --git a/src/backend/executor/nodeMergeAppend.c b/src/backend/executor/nodeMergeAppend.c index 405e8f9428..300bcd5cf3 100644 --- a/src/backend/executor/nodeMergeAppend.c +++ b/src/backend/executor/nodeMergeAppend.c @@ -122,11 +122,11 @@ ExecInitMergeAppend(MergeAppend *node, EState *estate, int eflags) mergestate->ms_prune_state = NULL; } - mergeplanstates = (PlanState **) palloc(nplans * sizeof(PlanState *)); + mergeplanstates = palloc_array(PlanState *, nplans); mergestate->mergeplans = mergeplanstates; mergestate->ms_nplans = nplans; - mergestate->ms_slots = (TupleTableSlot **) palloc0(sizeof(TupleTableSlot *) * nplans); + mergestate->ms_slots = palloc0_array(TupleTableSlot *, nplans); mergestate->ms_heap = binaryheap_allocate(nplans, heap_compare_slots, mergestate); @@ -174,7 +174,7 @@ ExecInitMergeAppend(MergeAppend *node, EState *estate, int eflags) * initialize sort-key information */ mergestate->ms_nkeys = node->numCols; - mergestate->ms_sortkeys = palloc0(sizeof(SortSupportData) * node->numCols); + mergestate->ms_sortkeys = palloc0_array(SortSupportData, node->numCols); for (i = 0; i < node->numCols; i++) { diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index e44f122388..874b71e660 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -581,8 +581,8 @@ ExecComputeStoredGenerated(ResultRelInfo *resultRelInfo, oldContext = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate)); - values = palloc(sizeof(*values) * natts); - nulls = palloc(sizeof(*nulls) * natts); + values = palloc_array(Datum, natts); + nulls = palloc_array(bool, natts); slot_getallattrs(slot); memcpy(nulls, slot->tts_isnull, sizeof(*nulls) * natts); @@ -962,10 +962,8 @@ ExecInsert(ModifyTableContext *context, if (resultRelInfo->ri_Slots == NULL) { - resultRelInfo->ri_Slots = palloc(sizeof(TupleTableSlot *) * - resultRelInfo->ri_BatchSize); - resultRelInfo->ri_PlanSlots = palloc(sizeof(TupleTableSlot *) * - resultRelInfo->ri_BatchSize); + resultRelInfo->ri_Slots = palloc_array(TupleTableSlot *, resultRelInfo->ri_BatchSize); + resultRelInfo->ri_PlanSlots = palloc_array(TupleTableSlot *, resultRelInfo->ri_BatchSize); } /* @@ -4745,8 +4743,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) mtstate->mt_done = false; mtstate->mt_nrels = nrels; - mtstate->resultRelInfo = (ResultRelInfo *) - palloc(nrels * sizeof(ResultRelInfo)); + mtstate->resultRelInfo = palloc_array(ResultRelInfo, nrels); mtstate->mt_merge_pending_not_matched = NULL; mtstate->mt_merge_inserted = 0; diff --git a/src/backend/executor/nodeProjectSet.c b/src/backend/executor/nodeProjectSet.c index 880f39fb2f..7d621cebc7 100644 --- a/src/backend/executor/nodeProjectSet.c +++ b/src/backend/executor/nodeProjectSet.c @@ -267,10 +267,8 @@ ExecInitProjectSet(ProjectSet *node, EState *estate, int eflags) /* Create workspace for per-tlist-entry expr state & SRF-is-done state */ state->nelems = list_length(node->plan.targetlist); - state->elems = (Node **) - palloc(sizeof(Node *) * state->nelems); - state->elemdone = (ExprDoneCond *) - palloc(sizeof(ExprDoneCond) * state->nelems); + state->elems = palloc_array(Node *, state->nelems); + state->elemdone = palloc_array(ExprDoneCond, state->nelems); /* * Build expressions to evaluate targetlist. We can't use diff --git a/src/backend/executor/nodeSamplescan.c b/src/backend/executor/nodeSamplescan.c index 6b3db7548e..c28bc6fc62 100644 --- a/src/backend/executor/nodeSamplescan.c +++ b/src/backend/executor/nodeSamplescan.c @@ -228,7 +228,7 @@ tablesample_init(SampleScanState *scanstate) ListCell *arg; scanstate->donetuples = 0; - params = (Datum *) palloc(list_length(scanstate->args) * sizeof(Datum)); + params = palloc_array(Datum, list_length(scanstate->args)); i = 0; foreach(arg, scanstate->args) diff --git a/src/backend/executor/nodeTableFuncscan.c b/src/backend/executor/nodeTableFuncscan.c index 4bae685d45..4abada0e03 100644 --- a/src/backend/executor/nodeTableFuncscan.c +++ b/src/backend/executor/nodeTableFuncscan.c @@ -192,8 +192,8 @@ ExecInitTableFuncScan(TableFuncScan *node, EState *estate, int eflags) scanstate->notnulls = tf->notnulls; /* these are allocated now and initialized later */ - scanstate->in_functions = palloc(sizeof(FmgrInfo) * tupdesc->natts); - scanstate->typioparams = palloc(sizeof(Oid) * tupdesc->natts); + scanstate->in_functions = palloc_array(FmgrInfo, tupdesc->natts); + scanstate->typioparams = palloc_array(Oid, tupdesc->natts); /* * Fill in the necessary fmgr infos. diff --git a/src/backend/executor/nodeTidrangescan.c b/src/backend/executor/nodeTidrangescan.c index 6fd9f68cdd..4ceb181d62 100644 --- a/src/backend/executor/nodeTidrangescan.c +++ b/src/backend/executor/nodeTidrangescan.c @@ -72,7 +72,7 @@ MakeTidOpExpr(OpExpr *expr, TidRangeScanState *tidstate) else elog(ERROR, "could not identify CTID variable"); - tidopexpr = (TidOpExpr *) palloc(sizeof(TidOpExpr)); + tidopexpr = palloc_object(TidOpExpr); tidopexpr->inclusive = false; /* for now */ switch (expr->opno) diff --git a/src/backend/executor/nodeTidscan.c b/src/backend/executor/nodeTidscan.c index d50c660035..35fcd5625d 100644 --- a/src/backend/executor/nodeTidscan.c +++ b/src/backend/executor/nodeTidscan.c @@ -78,7 +78,7 @@ TidExprListCreate(TidScanState *tidstate) foreach(l, node->tidquals) { Expr *expr = (Expr *) lfirst(l); - TidExpr *tidexpr = (TidExpr *) palloc0(sizeof(TidExpr)); + TidExpr *tidexpr = palloc0_object(TidExpr); if (is_opclause(expr)) { diff --git a/src/backend/executor/nodeWindowAgg.c b/src/backend/executor/nodeWindowAgg.c index 3a0d1f0c92..c0e5ab8dbb 100644 --- a/src/backend/executor/nodeWindowAgg.c +++ b/src/backend/executor/nodeWindowAgg.c @@ -2661,14 +2661,14 @@ ExecInitWindowAgg(WindowAgg *node, EState *estate, int eflags) numfuncs = winstate->numfuncs; numaggs = winstate->numaggs; econtext = winstate->ss.ps.ps_ExprContext; - econtext->ecxt_aggvalues = (Datum *) palloc0(sizeof(Datum) * numfuncs); - econtext->ecxt_aggnulls = (bool *) palloc0(sizeof(bool) * numfuncs); + econtext->ecxt_aggvalues = palloc0_array(Datum, numfuncs); + econtext->ecxt_aggnulls = palloc0_array(bool, numfuncs); /* * allocate per-wfunc/per-agg state information. */ - perfunc = (WindowStatePerFunc) palloc0(sizeof(WindowStatePerFuncData) * numfuncs); - peragg = (WindowStatePerAgg) palloc0(sizeof(WindowStatePerAggData) * numaggs); + perfunc = palloc0_array(WindowStatePerFuncData, numfuncs); + peragg = palloc0_array(WindowStatePerAggData, numaggs); winstate->perfunc = perfunc; winstate->peragg = peragg; @@ -3467,8 +3467,8 @@ init_notnull_info(WindowObject winobj, WindowStatePerFunc perfuncstate) if (winobj->ignore_nulls == PARSER_IGNORE_NULLS) { - winobj->notnull_info = palloc0(sizeof(uint8 *) * numargs); - winobj->num_notnull_info = palloc0(sizeof(int64) * numargs); + winobj->notnull_info = palloc0_array(uint8 *, numargs); + winobj->num_notnull_info = palloc0_array(int64, numargs); } } diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index 653500b38d..34a63a977b 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -1130,8 +1130,8 @@ SPI_modifytuple(Relation rel, HeapTuple tuple, int natts, int *attnum, SPI_result = 0; numberOfAttributes = rel->rd_att->natts; - v = (Datum *) palloc(numberOfAttributes * sizeof(Datum)); - n = (bool *) palloc(numberOfAttributes * sizeof(bool)); + v = palloc_array(Datum, numberOfAttributes); + n = palloc_array(bool, numberOfAttributes); /* fetch old values and nulls */ heap_deform_tuple(tuple, rel->rd_att, v, n); @@ -2141,8 +2141,7 @@ spi_dest_startup(DestReceiver *self, int operation, TupleDesc typeinfo) ALLOCSET_DEFAULT_SIZES); MemoryContextSwitchTo(tuptabcxt); - _SPI_current->tuptable = tuptable = (SPITupleTable *) - palloc0(sizeof(SPITupleTable)); + _SPI_current->tuptable = tuptable = palloc0_object(SPITupleTable); tuptable->tuptabcxt = tuptabcxt; tuptable->subid = GetCurrentSubTransactionId(); @@ -2155,7 +2154,7 @@ spi_dest_startup(DestReceiver *self, int operation, TupleDesc typeinfo) /* set up initial allocations */ tuptable->alloced = 128; - tuptable->vals = (HeapTuple *) palloc(tuptable->alloced * sizeof(HeapTuple)); + tuptable->vals = palloc_array(HeapTuple, tuptable->alloced); tuptable->numvals = 0; tuptable->tupdesc = CreateTupleDescCopy(typeinfo); @@ -3162,7 +3161,7 @@ _SPI_make_plan_non_temp(SPIPlanPtr plan) oldcxt = MemoryContextSwitchTo(plancxt); /* Copy the _SPI_plan struct and subsidiary data into the new context */ - newplan = (SPIPlanPtr) palloc0(sizeof(_SPI_plan)); + newplan = palloc0_object(_SPI_plan); newplan->magic = _SPI_PLAN_MAGIC; newplan->plancxt = plancxt; newplan->parse_mode = plan->parse_mode; @@ -3170,7 +3169,7 @@ _SPI_make_plan_non_temp(SPIPlanPtr plan) newplan->nargs = plan->nargs; if (plan->nargs > 0) { - newplan->argtypes = (Oid *) palloc(plan->nargs * sizeof(Oid)); + newplan->argtypes = palloc_array(Oid, plan->nargs); memcpy(newplan->argtypes, plan->argtypes, plan->nargs * sizeof(Oid)); } else @@ -3227,7 +3226,7 @@ _SPI_save_plan(SPIPlanPtr plan) oldcxt = MemoryContextSwitchTo(plancxt); /* Copy the SPI plan into its own context */ - newplan = (SPIPlanPtr) palloc0(sizeof(_SPI_plan)); + newplan = palloc0_object(_SPI_plan); newplan->magic = _SPI_PLAN_MAGIC; newplan->plancxt = plancxt; newplan->parse_mode = plan->parse_mode; @@ -3235,7 +3234,7 @@ _SPI_save_plan(SPIPlanPtr plan) newplan->nargs = plan->nargs; if (plan->nargs > 0) { - newplan->argtypes = (Oid *) palloc(plan->nargs * sizeof(Oid)); + newplan->argtypes = palloc_array(Oid, plan->nargs); memcpy(newplan->argtypes, plan->argtypes, plan->nargs * sizeof(Oid)); } else @@ -3369,7 +3368,7 @@ SPI_register_trigger_data(TriggerData *tdata) if (tdata->tg_newtable) { EphemeralNamedRelation enr = - palloc(sizeof(EphemeralNamedRelationData)); + palloc_object(EphemeralNamedRelationData); int rc; enr->md.name = tdata->tg_trigger->tgnewtable; @@ -3386,7 +3385,7 @@ SPI_register_trigger_data(TriggerData *tdata) if (tdata->tg_oldtable) { EphemeralNamedRelation enr = - palloc(sizeof(EphemeralNamedRelationData)); + palloc_object(EphemeralNamedRelationData); int rc; enr->md.name = tdata->tg_trigger->tgoldtable; diff --git a/src/backend/executor/tqueue.c b/src/backend/executor/tqueue.c index 6c5e1f1262..d9bf59f672 100644 --- a/src/backend/executor/tqueue.c +++ b/src/backend/executor/tqueue.c @@ -120,7 +120,7 @@ CreateTupleQueueDestReceiver(shm_mq_handle *handle) { TQueueDestReceiver *self; - self = (TQueueDestReceiver *) palloc0(sizeof(TQueueDestReceiver)); + self = palloc0_object(TQueueDestReceiver); self->pub.receiveSlot = tqueueReceiveSlot; self->pub.rStartup = tqueueStartupReceiver; @@ -138,7 +138,7 @@ CreateTupleQueueDestReceiver(shm_mq_handle *handle) TupleQueueReader * CreateTupleQueueReader(shm_mq_handle *handle) { - TupleQueueReader *reader = palloc0(sizeof(TupleQueueReader)); + TupleQueueReader *reader = palloc0_object(TupleQueueReader); reader->queue = handle; diff --git a/src/backend/executor/tstoreReceiver.c b/src/backend/executor/tstoreReceiver.c index 02a3ad3aa6..2012618e23 100644 --- a/src/backend/executor/tstoreReceiver.c +++ b/src/backend/executor/tstoreReceiver.c @@ -238,7 +238,7 @@ tstoreDestroyReceiver(DestReceiver *self) DestReceiver * CreateTuplestoreDestReceiver(void) { - TStoreState *self = (TStoreState *) palloc0(sizeof(TStoreState)); + TStoreState *self = palloc0_object(TStoreState); self->pub.receiveSlot = tstoreReceiveSlot_notoast; /* might change */ self->pub.rStartup = tstoreStartupReceiver; diff --git a/src/backend/foreign/foreign.c b/src/backend/foreign/foreign.c index a57e59f27e..fa3f4c7524 100644 --- a/src/backend/foreign/foreign.c +++ b/src/backend/foreign/foreign.c @@ -66,7 +66,7 @@ GetForeignDataWrapperExtended(Oid fdwid, bits16 flags) fdwform = (Form_pg_foreign_data_wrapper) GETSTRUCT(tp); - fdw = (ForeignDataWrapper *) palloc(sizeof(ForeignDataWrapper)); + fdw = palloc_object(ForeignDataWrapper); fdw->fdwid = fdwid; fdw->owner = fdwform->fdwowner; fdw->fdwname = pstrdup(NameStr(fdwform->fdwname)); @@ -140,7 +140,7 @@ GetForeignServerExtended(Oid serverid, bits16 flags) serverform = (Form_pg_foreign_server) GETSTRUCT(tp); - server = (ForeignServer *) palloc(sizeof(ForeignServer)); + server = palloc_object(ForeignServer); server->serverid = serverid; server->servername = pstrdup(NameStr(serverform->srvname)); server->owner = serverform->srvowner; @@ -227,7 +227,7 @@ GetUserMapping(Oid userid, Oid serverid) MappingUserName(userid), server->servername))); } - um = (UserMapping *) palloc(sizeof(UserMapping)); + um = palloc_object(UserMapping); um->umid = ((Form_pg_user_mapping) GETSTRUCT(tp))->oid; um->userid = userid; um->serverid = serverid; @@ -265,7 +265,7 @@ GetForeignTable(Oid relid) elog(ERROR, "cache lookup failed for foreign table %u", relid); tableform = (Form_pg_foreign_table) GETSTRUCT(tp); - ft = (ForeignTable *) palloc(sizeof(ForeignTable)); + ft = palloc_object(ForeignTable); ft->relid = relid; ft->serverid = tableform->ftserver; @@ -463,7 +463,7 @@ GetFdwRoutineForRelation(Relation relation, bool makecopy) /* We have valid cached data --- does the caller want a copy? */ if (makecopy) { - fdwroutine = (FdwRoutine *) palloc(sizeof(FdwRoutine)); + fdwroutine = palloc_object(FdwRoutine); memcpy(fdwroutine, relation->rd_fdwroutine, sizeof(FdwRoutine)); return fdwroutine; } diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c index e978b996ba..15c3475ede 100644 --- a/src/backend/jit/llvm/llvmjit.c +++ b/src/backend/jit/llvm/llvmjit.c @@ -500,7 +500,7 @@ llvm_copy_attributes_at_index(LLVMValueRef v_from, LLVMValueRef v_to, uint32 ind if (num_attributes == 0) return; - attrs = palloc(sizeof(LLVMAttributeRef) * num_attributes); + attrs = palloc_array(LLVMAttributeRef, num_attributes); LLVMGetAttributesAtIndex(v_from, index, attrs); for (int attno = 0; attno < num_attributes; attno++) @@ -1123,9 +1123,9 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx, LLVMOrcCLookupSet LookupSet, size_t LookupSetSize) { #if LLVM_VERSION_MAJOR > 14 - LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMOrcCSymbolMapPair) * LookupSetSize); + LLVMOrcCSymbolMapPairs symbols = palloc0_array(LLVMOrcCSymbolMapPair, LookupSetSize); #else - LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) * LookupSetSize); + LLVMOrcCSymbolMapPairs symbols = palloc0_array(LLVMJITCSymbolMapPair, LookupSetSize); #endif LLVMErrorRef error; LLVMOrcMaterializationUnitRef mu; diff --git a/src/backend/jit/llvm/llvmjit_deform.c b/src/backend/jit/llvm/llvmjit_deform.c index f500cbda89..89167d15c3 100644 --- a/src/backend/jit/llvm/llvmjit_deform.c +++ b/src/backend/jit/llvm/llvmjit_deform.c @@ -156,12 +156,12 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, b = LLVMCreateBuilderInContext(lc); - attcheckattnoblocks = palloc(sizeof(LLVMBasicBlockRef) * natts); - attstartblocks = palloc(sizeof(LLVMBasicBlockRef) * natts); - attisnullblocks = palloc(sizeof(LLVMBasicBlockRef) * natts); - attcheckalignblocks = palloc(sizeof(LLVMBasicBlockRef) * natts); - attalignblocks = palloc(sizeof(LLVMBasicBlockRef) * natts); - attstoreblocks = palloc(sizeof(LLVMBasicBlockRef) * natts); + attcheckattnoblocks = palloc_array(LLVMBasicBlockRef, natts); + attstartblocks = palloc_array(LLVMBasicBlockRef, natts); + attisnullblocks = palloc_array(LLVMBasicBlockRef, natts); + attcheckalignblocks = palloc_array(LLVMBasicBlockRef, natts); + attalignblocks = palloc_array(LLVMBasicBlockRef, natts); + attstoreblocks = palloc_array(LLVMBasicBlockRef, natts); known_alignment = 0; diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c index ac88881e99..33e62f980b 100644 --- a/src/backend/jit/llvm/llvmjit_expr.c +++ b/src/backend/jit/llvm/llvmjit_expr.c @@ -297,7 +297,7 @@ llvm_compile_expr(ExprState *state) "v.econtext.aggnulls"); /* allocate blocks for each op upfront, so we can do jumps easily */ - opblocks = palloc(sizeof(LLVMBasicBlockRef) * state->steps_len); + opblocks = palloc_array(LLVMBasicBlockRef, state->steps_len); for (int opno = 0; opno < state->steps_len; opno++) opblocks[opno] = l_bb_append_v(eval_fn, "b.op.%d.start", opno); @@ -2505,7 +2505,7 @@ llvm_compile_expr(ExprState *state) v_nullsp = l_ptr_const(nulls, l_ptr(TypeStorageBool)); /* create blocks for checking args */ - b_checknulls = palloc(sizeof(LLVMBasicBlockRef) * nargs); + b_checknulls = palloc_array(LLVMBasicBlockRef, nargs); for (int argno = 0; argno < nargs; argno++) { b_checknulls[argno] = @@ -2956,7 +2956,7 @@ llvm_compile_expr(ExprState *state) */ { - CompiledExprState *cstate = palloc0(sizeof(CompiledExprState)); + CompiledExprState *cstate = palloc0_object(CompiledExprState); cstate->context = context; cstate->funcname = funcname; @@ -3068,7 +3068,7 @@ build_EvalXFuncInt(LLVMBuilderRef b, LLVMModuleRef mod, const char *funcname, elog(ERROR, "parameter mismatch: %s expects %d passed %d", funcname, LLVMCountParams(v_fn), nargs + 2); - params = palloc(sizeof(LLVMValueRef) * (2 + nargs)); + params = palloc_array(LLVMValueRef, (2 + nargs)); params[argno++] = v_state; params[argno++] = l_ptr_const(op, l_ptr(StructExprEvalStep)); diff --git a/src/backend/lib/bipartite_match.c b/src/backend/lib/bipartite_match.c index 5af789652c..ed54f19049 100644 --- a/src/backend/lib/bipartite_match.c +++ b/src/backend/lib/bipartite_match.c @@ -38,7 +38,7 @@ static bool hk_depth_search(BipartiteMatchState *state, int u); BipartiteMatchState * BipartiteMatch(int u_size, int v_size, short **adjacency) { - BipartiteMatchState *state = palloc(sizeof(BipartiteMatchState)); + BipartiteMatchState *state = palloc_object(BipartiteMatchState); if (u_size < 0 || u_size >= SHRT_MAX || v_size < 0 || v_size >= SHRT_MAX) diff --git a/src/backend/lib/dshash.c b/src/backend/lib/dshash.c index e1ba367cf1..82f6aa966d 100644 --- a/src/backend/lib/dshash.c +++ b/src/backend/lib/dshash.c @@ -211,7 +211,7 @@ dshash_create(dsa_area *area, const dshash_parameters *params, void *arg) dsa_pointer control; /* Allocate the backend-local object representing the hash table. */ - hash_table = palloc(sizeof(dshash_table)); + hash_table = palloc_object(dshash_table); /* Allocate the control object in shared memory. */ control = dsa_allocate(area, sizeof(dshash_table_control)); @@ -276,7 +276,7 @@ dshash_attach(dsa_area *area, const dshash_parameters *params, dsa_pointer control; /* Allocate the backend-local object representing the hash table. */ - hash_table = palloc(sizeof(dshash_table)); + hash_table = palloc_object(dshash_table); /* Find the control object in shared memory. */ control = handle; diff --git a/src/backend/lib/integerset.c b/src/backend/lib/integerset.c index f4153b0e15..aca1df2ad5 100644 --- a/src/backend/lib/integerset.c +++ b/src/backend/lib/integerset.c @@ -284,7 +284,7 @@ intset_create(void) { IntegerSet *intset; - intset = (IntegerSet *) palloc(sizeof(IntegerSet)); + intset = palloc_object(IntegerSet); intset->context = CurrentMemoryContext; intset->mem_used = GetMemoryChunkSpace(intset); diff --git a/src/backend/lib/pairingheap.c b/src/backend/lib/pairingheap.c index fa8431f794..3497dc7902 100644 --- a/src/backend/lib/pairingheap.c +++ b/src/backend/lib/pairingheap.c @@ -43,7 +43,7 @@ pairingheap_allocate(pairingheap_comparator compare, void *arg) { pairingheap *heap; - heap = (pairingheap *) palloc(sizeof(pairingheap)); + heap = palloc_object(pairingheap); pairingheap_initialize(heap, compare, arg); return heap; diff --git a/src/backend/lib/rbtree.c b/src/backend/lib/rbtree.c index 1f0553f914..8fe6bfc539 100644 --- a/src/backend/lib/rbtree.c +++ b/src/backend/lib/rbtree.c @@ -106,7 +106,7 @@ rbt_create(Size node_size, rbt_freefunc freefunc, void *arg) { - RBTree *tree = (RBTree *) palloc(sizeof(RBTree)); + RBTree *tree = palloc_object(RBTree); Assert(node_size > sizeof(RBTNode)); diff --git a/src/backend/libpq/auth-oauth.c b/src/backend/libpq/auth-oauth.c index 27f7af7be0..32a370ede1 100644 --- a/src/backend/libpq/auth-oauth.c +++ b/src/backend/libpq/auth-oauth.c @@ -108,7 +108,7 @@ oauth_init(Port *port, const char *selected_mech, const char *shadow_pass) errcode(ERRCODE_PROTOCOL_VIOLATION), errmsg("client selected an invalid SASL authentication mechanism")); - ctx = palloc0(sizeof(*ctx)); + ctx = palloc0_object(struct oauth_ctx); ctx->state = OAUTH_STATE_INIT; ctx->port = port; @@ -656,7 +656,7 @@ validate(Port *port, const char *auth) errmsg("validation of OAuth token requested without a validator loaded")); /* Call the validation function from the validator module */ - ret = palloc0(sizeof(ValidatorModuleResult)); + ret = palloc0_object(ValidatorModuleResult); if (!ValidatorCallbacks->validate_cb(validator_module_state, token, port->user_name, ret)) { @@ -785,14 +785,14 @@ load_validator_library(const char *libname) "OAuth validator", libname, "validate_cb")); /* Allocate memory for validator library private state data */ - validator_module_state = (ValidatorModuleState *) palloc0(sizeof(ValidatorModuleState)); + validator_module_state = palloc0_object(ValidatorModuleState); validator_module_state->sversion = PG_VERSION_NUM; if (ValidatorCallbacks->startup_cb != NULL) ValidatorCallbacks->startup_cb(validator_module_state); /* Shut down the library before cleaning up its state. */ - mcb = palloc0(sizeof(*mcb)); + mcb = palloc0_object(MemoryContextCallback); mcb->func = shutdown_validator_library; MemoryContextRegisterResetCallback(CurrentMemoryContext, mcb); diff --git a/src/backend/libpq/auth-scram.c b/src/backend/libpq/auth-scram.c index e343ffea46..2d6d97b4bb 100644 --- a/src/backend/libpq/auth-scram.c +++ b/src/backend/libpq/auth-scram.c @@ -240,7 +240,7 @@ scram_init(Port *port, const char *selected_mech, const char *shadow_pass) scram_state *state; bool got_secret; - state = (scram_state *) palloc0(sizeof(scram_state)); + state = palloc0_object(scram_state); state->port = port; state->state = SCRAM_AUTH_INIT; diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 6cb25399c2..4c259f58d7 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -309,7 +309,7 @@ regcomp_auth_token(AuthToken *token, char *filename, int line_num, if (token->string[0] != '/') return 0; /* nothing to compile */ - token->regex = (regex_t *) palloc0(sizeof(regex_t)); + token->regex = palloc0_object(regex_t); wstr = palloc((strlen(token->string + 1) + 1) * sizeof(pg_wchar)); wlen = pg_mb2wchar_with_len(token->string + 1, wstr, strlen(token->string + 1)); @@ -891,7 +891,7 @@ process_line: * to this list. */ oldcxt = MemoryContextSwitchTo(tokenize_context); - tok_line = (TokenizedAuthLine *) palloc0(sizeof(TokenizedAuthLine)); + tok_line = palloc0_object(TokenizedAuthLine); tok_line->fields = current_line; tok_line->file_name = pstrdup(filename); tok_line->line_num = line_number; @@ -1339,7 +1339,7 @@ parse_hba_line(TokenizedAuthLine *tok_line, int elevel) AuthToken *token; HbaLine *parsedline; - parsedline = palloc0(sizeof(HbaLine)); + parsedline = palloc0_object(HbaLine); parsedline->sourcefile = pstrdup(file_name); parsedline->linenumber = line_num; parsedline->rawline = pstrdup(tok_line->raw_line); @@ -2622,7 +2622,7 @@ check_hba(Port *port) } /* If no matching entry was found, then implicitly reject. */ - hba = palloc0(sizeof(HbaLine)); + hba = palloc0_object(HbaLine); hba->auth_method = uaImplicitReject; port->hba = hba; } @@ -2758,7 +2758,7 @@ parse_ident_line(TokenizedAuthLine *tok_line, int elevel) Assert(tok_line->fields != NIL); field = list_head(tok_line->fields); - parsedline = palloc0(sizeof(IdentLine)); + parsedline = palloc0_object(IdentLine); parsedline->linenumber = line_num; /* Get the map token (must exist) */ diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index 40b180644e..e33623fdba 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -178,7 +178,7 @@ pq_init(ClientSocket *client_sock) int latch_pos PG_USED_FOR_ASSERTS_ONLY; /* allocate the Port struct and copy the ClientSocket contents to it */ - port = palloc0(sizeof(Port)); + port = palloc0_object(Port); port->sock = client_sock->sock; memcpy(&port->raddr.addr, &client_sock->raddr.addr, client_sock->raddr.salen); port->raddr.salen = client_sock->raddr.salen; diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c index d228318dc7..024a2b2fd8 100644 --- a/src/backend/nodes/nodeFuncs.c +++ b/src/backend/nodes/nodeFuncs.c @@ -2953,7 +2953,7 @@ expression_tree_mutator_impl(Node *node, */ #define FLATCOPY(newnode, node, nodetype) \ - ( (newnode) = (nodetype *) palloc(sizeof(nodetype)), \ + ( (newnode) = palloc_object(nodetype), \ memcpy((newnode), (node), sizeof(nodetype)) ) #define MUTATE(newfield, oldfield, fieldtype) \ diff --git a/src/backend/nodes/queryjumblefuncs.c b/src/backend/nodes/queryjumblefuncs.c index 31f9715197..ffc230af42 100644 --- a/src/backend/nodes/queryjumblefuncs.c +++ b/src/backend/nodes/queryjumblefuncs.c @@ -181,7 +181,7 @@ InitJumble(void) { JumbleState *jstate; - jstate = (JumbleState *) palloc(sizeof(JumbleState)); + jstate = palloc_object(JumbleState); /* Set up workspace for query jumbling */ jstate->jumble = (unsigned char *) palloc(JUMBLE_SIZE); diff --git a/src/backend/nodes/tidbitmap.c b/src/backend/nodes/tidbitmap.c index 1f83d0d55f..a2fa96317d 100644 --- a/src/backend/nodes/tidbitmap.c +++ b/src/backend/nodes/tidbitmap.c @@ -683,7 +683,7 @@ tbm_begin_private_iterate(TIDBitmap *tbm) * Create the TBMPrivateIterator struct, with enough trailing space to * serve the needs of the TBMIterateResult sub-struct. */ - iterator = (TBMPrivateIterator *) palloc(sizeof(TBMPrivateIterator)); + iterator = palloc_object(TBMPrivateIterator); iterator->tbm = tbm; /* @@ -1468,7 +1468,7 @@ tbm_attach_shared_iterate(dsa_area *dsa, dsa_pointer dp) * Create the TBMSharedIterator struct, with enough trailing space to * serve the needs of the TBMIterateResult sub-struct. */ - iterator = (TBMSharedIterator *) palloc0(sizeof(TBMSharedIterator)); + iterator = palloc0_object(TBMSharedIterator); istate = (TBMSharedIteratorState *) dsa_get_address(dsa, dp); diff --git a/src/backend/optimizer/geqo/geqo_erx.c b/src/backend/optimizer/geqo/geqo_erx.c index af289f7eeb..f11a59e4a2 100644 --- a/src/backend/optimizer/geqo/geqo_erx.c +++ b/src/backend/optimizer/geqo/geqo_erx.c @@ -62,7 +62,7 @@ alloc_edge_table(PlannerInfo *root, int num_gene) * directly; 0 will not be used */ - edge_table = (Edge *) palloc((num_gene + 1) * sizeof(Edge)); + edge_table = palloc_array(Edge, num_gene + 1); return edge_table; } diff --git a/src/backend/optimizer/geqo/geqo_eval.c b/src/backend/optimizer/geqo/geqo_eval.c index 8005754c8c..c65a31d067 100644 --- a/src/backend/optimizer/geqo/geqo_eval.c +++ b/src/backend/optimizer/geqo/geqo_eval.c @@ -191,7 +191,7 @@ gimme_tree(PlannerInfo *root, Gene *tour, int num_gene) cur_rel_index - 1); /* Make it into a single-rel clump */ - cur_clump = (Clump *) palloc(sizeof(Clump)); + cur_clump = palloc_object(Clump); cur_clump->joinrel = cur_rel; cur_clump->size = 1; diff --git a/src/backend/optimizer/geqo/geqo_pmx.c b/src/backend/optimizer/geqo/geqo_pmx.c index 01d5571192..af1cb86839 100644 --- a/src/backend/optimizer/geqo/geqo_pmx.c +++ b/src/backend/optimizer/geqo/geqo_pmx.c @@ -48,10 +48,10 @@ void pmx(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene) { - int *failed = (int *) palloc((num_gene + 1) * sizeof(int)); - int *from = (int *) palloc((num_gene + 1) * sizeof(int)); - int *indx = (int *) palloc((num_gene + 1) * sizeof(int)); - int *check_list = (int *) palloc((num_gene + 1) * sizeof(int)); + int *failed = palloc_array(int, num_gene + 1); + int *from = palloc_array(int, num_gene + 1); + int *indx = palloc_array(int, num_gene + 1); + int *check_list = palloc_array(int, num_gene + 1); int left, right, diff --git a/src/backend/optimizer/geqo/geqo_pool.c b/src/backend/optimizer/geqo/geqo_pool.c index 89e3d6a027..d0f53d888e 100644 --- a/src/backend/optimizer/geqo/geqo_pool.c +++ b/src/backend/optimizer/geqo/geqo_pool.c @@ -46,17 +46,17 @@ alloc_pool(PlannerInfo *root, int pool_size, int string_length) int i; /* pool */ - new_pool = (Pool *) palloc(sizeof(Pool)); + new_pool = palloc_object(Pool); new_pool->size = pool_size; new_pool->string_length = string_length; /* all chromosome */ - new_pool->data = (Chromosome *) palloc(pool_size * sizeof(Chromosome)); + new_pool->data = palloc_array(Chromosome, pool_size); /* all gene */ chromo = (Chromosome *) new_pool->data; /* vector of all chromos */ for (i = 0; i < pool_size; i++) - chromo[i].string = palloc((string_length + 1) * sizeof(Gene)); + chromo[i].string = palloc_array(Gene, string_length + 1); return new_pool; } @@ -163,8 +163,8 @@ alloc_chromo(PlannerInfo *root, int string_length) { Chromosome *chromo; - chromo = (Chromosome *) palloc(sizeof(Chromosome)); - chromo->string = (Gene *) palloc((string_length + 1) * sizeof(Gene)); + chromo = palloc_object(Chromosome); + chromo->string = palloc_array(Gene, string_length + 1); return chromo; } diff --git a/src/backend/optimizer/geqo/geqo_recombination.c b/src/backend/optimizer/geqo/geqo_recombination.c index a5d3e47ad1..41d35c179e 100644 --- a/src/backend/optimizer/geqo/geqo_recombination.c +++ b/src/backend/optimizer/geqo/geqo_recombination.c @@ -74,7 +74,7 @@ alloc_city_table(PlannerInfo *root, int num_gene) * palloc one extra location so that nodes numbered 1..n can be indexed * directly; 0 will not be used */ - city_table = (City *) palloc((num_gene + 1) * sizeof(City)); + city_table = palloc_array(City, num_gene + 1); return city_table; } diff --git a/src/backend/optimizer/path/clausesel.c b/src/backend/optimizer/path/clausesel.c index d0f516b764..eb9b7f3eab 100644 --- a/src/backend/optimizer/path/clausesel.c +++ b/src/backend/optimizer/path/clausesel.c @@ -495,7 +495,7 @@ addRangeClause(RangeQueryClause **rqlist, Node *clause, } /* No matching var found, so make a new clause-pair data structure */ - rqelem = (RangeQueryClause *) palloc(sizeof(RangeQueryClause)); + rqelem = palloc_object(RangeQueryClause); rqelem->var = var; if (is_lobound) { diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 5a7283bd2f..a39cc793b4 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -2179,7 +2179,7 @@ append_nonpartial_cost(List *subpaths, int numpaths, int parallel_workers) * whichever is less. */ arrlen = Min(parallel_workers, numpaths); - costarr = (Cost *) palloc(sizeof(Cost) * arrlen); + costarr = palloc_array(Cost, arrlen); /* The first few paths will each be claimed by a different worker. */ path_index = 0; @@ -4137,7 +4137,7 @@ cached_scansel(PlannerInfo *root, RestrictInfo *rinfo, PathKey *pathkey) /* Cache the result in suitably long-lived workspace */ oldcontext = MemoryContextSwitchTo(root->planner_cxt); - cache = (MergeScanSelCache *) palloc(sizeof(MergeScanSelCache)); + cache = palloc_object(MergeScanSelCache); cache->opfamily = pathkey->pk_opfamily; cache->collation = pathkey->pk_eclass->ec_collation; cache->cmptype = pathkey->pk_cmptype; diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index 2654c59c4c..5d4f81ee77 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -1291,7 +1291,7 @@ group_similar_or_args(PlannerInfo *root, RelOptInfo *rel, RestrictInfo *rinfo) * which will be used to sort these arguments at the next step. */ i = -1; - matches = (OrArgIndexMatch *) palloc(sizeof(OrArgIndexMatch) * n); + matches = palloc_array(OrArgIndexMatch, n); foreach(lc, orargs) { Node *arg = lfirst(lc); @@ -1853,8 +1853,7 @@ choose_bitmap_and(PlannerInfo *root, RelOptInfo *rel, List *paths) * same set of clauses; keep only the cheapest-to-scan of any such groups. * The surviving paths are put into an array for qsort'ing. */ - pathinfoarray = (PathClauseUsage **) - palloc(npaths * sizeof(PathClauseUsage *)); + pathinfoarray = palloc_array(PathClauseUsage *, npaths); clauselist = NIL; npaths = 0; foreach(l, paths) @@ -2090,7 +2089,7 @@ classify_index_clause_usage(Path *path, List **clauselist) Bitmapset *clauseids; ListCell *lc; - result = (PathClauseUsage *) palloc(sizeof(PathClauseUsage)); + result = palloc_object(PathClauseUsage); result->path = path; /* Recursively find the quals and preds used by the path */ diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c index 5d1fc3899d..8827b9a524 100644 --- a/src/backend/optimizer/path/joinrels.c +++ b/src/backend/optimizer/path/joinrels.c @@ -1990,8 +1990,7 @@ compute_partition_bounds(PlannerInfo *root, RelOptInfo *rel1, Assert(nparts > 0); joinrel->boundinfo = boundinfo; joinrel->nparts = nparts; - joinrel->part_rels = - (RelOptInfo **) palloc0(sizeof(RelOptInfo *) * nparts); + joinrel->part_rels = palloc0_array(RelOptInfo *, nparts); } else { diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index 296a894b85..e2784c0154 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -2363,8 +2363,7 @@ remove_self_joins_recurse(PlannerInfo *root, List *joinlist, Relids toRemove) * In order to find relations with the same oid we first build an array of * candidates and then sort it by oid. */ - candidates = (SelfJoinCandidate *) palloc(sizeof(SelfJoinCandidate) * - numRels); + candidates = palloc_array(SelfJoinCandidate, numRels); i = -1; j = 0; while ((i = bms_next_member(relids, i)) >= 0) diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 8af091ba64..bc417f9384 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -2207,7 +2207,7 @@ remap_groupColIdx(PlannerInfo *root, List *groupClause) Assert(grouping_map); - new_grpColIdx = palloc0(sizeof(AttrNumber) * list_length(groupClause)); + new_grpColIdx = palloc0_array(AttrNumber, list_length(groupClause)); i = 0; foreach(lc, groupClause) @@ -2496,9 +2496,9 @@ create_windowagg_plan(PlannerInfo *root, WindowAggPath *best_path) * Convert SortGroupClause lists into arrays of attr indexes and equality * operators, as wanted by executor. */ - partColIdx = (AttrNumber *) palloc(sizeof(AttrNumber) * numPart); - partOperators = (Oid *) palloc(sizeof(Oid) * numPart); - partCollations = (Oid *) palloc(sizeof(Oid) * numPart); + partColIdx = palloc_array(AttrNumber, numPart); + partOperators = palloc_array(Oid, numPart); + partCollations = palloc_array(Oid, numPart); partNumCols = 0; foreach(lc, wc->partitionClause) @@ -2513,9 +2513,9 @@ create_windowagg_plan(PlannerInfo *root, WindowAggPath *best_path) partNumCols++; } - ordColIdx = (AttrNumber *) palloc(sizeof(AttrNumber) * numOrder); - ordOperators = (Oid *) palloc(sizeof(Oid) * numOrder); - ordCollations = (Oid *) palloc(sizeof(Oid) * numOrder); + ordColIdx = palloc_array(AttrNumber, numOrder); + ordOperators = palloc_array(Oid, numOrder); + ordCollations = palloc_array(Oid, numOrder); ordNumCols = 0; foreach(lc, wc->orderClause) @@ -5862,9 +5862,9 @@ make_recursive_union(List *tlist, Oid *dupCollations; ListCell *slitem; - dupColIdx = (AttrNumber *) palloc(sizeof(AttrNumber) * numCols); - dupOperators = (Oid *) palloc(sizeof(Oid) * numCols); - dupCollations = (Oid *) palloc(sizeof(Oid) * numCols); + dupColIdx = palloc_array(AttrNumber, numCols); + dupOperators = palloc_array(Oid, numCols); + dupCollations = palloc_array(Oid, numCols); foreach(slitem, distinctList) { @@ -6694,9 +6694,9 @@ make_unique_from_pathkeys(Plan *lefttree, List *pathkeys, int numCols, * prepare_sort_from_pathkeys ... maybe unify sometime? */ Assert(numCols >= 0 && numCols <= list_length(pathkeys)); - uniqColIdx = (AttrNumber *) palloc(sizeof(AttrNumber) * numCols); - uniqOperators = (Oid *) palloc(sizeof(Oid) * numCols); - uniqCollations = (Oid *) palloc(sizeof(Oid) * numCols); + uniqColIdx = palloc_array(AttrNumber, numCols); + uniqOperators = palloc_array(Oid, numCols); + uniqCollations = palloc_array(Oid, numCols); foreach(lc, pathkeys) { @@ -6831,10 +6831,10 @@ make_setop(SetOpCmd cmd, SetOpStrategy strategy, * convert SortGroupClause list into arrays of attr indexes and comparison * operators, as wanted by executor */ - cmpColIdx = (AttrNumber *) palloc(sizeof(AttrNumber) * numCols); - cmpOperators = (Oid *) palloc(sizeof(Oid) * numCols); - cmpCollations = (Oid *) palloc(sizeof(Oid) * numCols); - cmpNullsFirst = (bool *) palloc(sizeof(bool) * numCols); + cmpColIdx = palloc_array(AttrNumber, numCols); + cmpOperators = palloc_array(Oid, numCols); + cmpCollations = palloc_array(Oid, numCols); + cmpNullsFirst = palloc_array(bool, numCols); foreach(slitem, groupList) { diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index 671c5cde8f..f7f76469a2 100644 --- a/src/backend/optimizer/plan/initsplan.c +++ b/src/backend/optimizer/plan/initsplan.c @@ -438,8 +438,7 @@ remove_useless_groupby_columns(PlannerInfo *root) * Fill groupbyattnos[k] with a bitmapset of the column attnos of RTE k * that are GROUP BY items. */ - groupbyattnos = (Bitmapset **) palloc0(sizeof(Bitmapset *) * - (list_length(parse->rtable) + 1)); + groupbyattnos = palloc0_array(Bitmapset *, list_length(parse->rtable) + 1); foreach(lc, root->processed_groupClause) { SortGroupClause *sgc = lfirst_node(SortGroupClause, lc); @@ -597,8 +596,7 @@ remove_useless_groupby_columns(PlannerInfo *root) * allocate the surplusvars[] array until we find something. */ if (surplusvars == NULL) - surplusvars = (Bitmapset **) palloc0(sizeof(Bitmapset *) * - (list_length(parse->rtable) + 1)); + surplusvars = palloc0_array(Bitmapset *, list_length(parse->rtable) + 1); /* Remember the attnos of the removable columns */ surplusvars[relid] = bms_difference(relattnos, best_keycolumns); diff --git a/src/backend/optimizer/plan/planagg.c b/src/backend/optimizer/plan/planagg.c index a2ac58d246..1a35c269e0 100644 --- a/src/backend/optimizer/plan/planagg.c +++ b/src/backend/optimizer/plan/planagg.c @@ -336,7 +336,7 @@ build_minmax_path(PlannerInfo *root, MinMaxAggInfo *mminfo, * than before. (This means that when we are done, there will be no Vars * of level 1, which is why the subquery can become an initplan.) */ - subroot = (PlannerInfo *) palloc(sizeof(PlannerInfo)); + subroot = palloc_object(PlannerInfo); memcpy(subroot, root, sizeof(PlannerInfo)); subroot->query_level++; subroot->parent_root = root; diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index fd77334e5f..8b22c30559 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -2213,7 +2213,7 @@ preprocess_grouping_sets(PlannerInfo *root) List *sets; int maxref = 0; ListCell *lc_set; - grouping_sets_data *gd = palloc0(sizeof(grouping_sets_data)); + grouping_sets_data *gd = palloc0_object(grouping_sets_data); /* * We don't currently make any attempt to optimize the groupClause when @@ -5977,8 +5977,8 @@ select_active_windows(PlannerInfo *root, WindowFuncLists *wflists) List *result = NIL; ListCell *lc; int nActive = 0; - WindowClauseSortData *actives = palloc(sizeof(WindowClauseSortData) - * list_length(windowClause)); + WindowClauseSortData *actives = palloc_array(WindowClauseSortData, + list_length(windowClause)); /* First, construct an array of the active windows */ foreach(lc, windowClause) diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index ccdc9bc264..cd7ea1e6b5 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -312,7 +312,7 @@ set_plan_references(PlannerInfo *root, Plan *plan) root->simple_rte_array[rc->rti] != NULL); /* flat copy is enough since all fields are scalars */ - newrc = (PlanRowMark *) palloc(sizeof(PlanRowMark)); + newrc = palloc_object(PlanRowMark); memcpy(newrc, rc, sizeof(PlanRowMark)); /* adjust indexes ... but *not* the rowmarkId */ @@ -545,7 +545,7 @@ add_rte_to_flat_rtable(PlannerGlobal *glob, List *rteperminfos, RangeTblEntry *newrte; /* flat copy to duplicate all the scalar fields */ - newrte = (RangeTblEntry *) palloc(sizeof(RangeTblEntry)); + newrte = palloc_object(RangeTblEntry); memcpy(newrte, rte, sizeof(RangeTblEntry)); /* zap unneeded sub-structure */ @@ -2028,7 +2028,7 @@ offset_relid_set(Relids relids, int rtoffset) static inline Var * copyVar(Var *var) { - Var *newvar = (Var *) palloc(sizeof(Var)); + Var *newvar = palloc_object(Var); *newvar = *var; return newvar; diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index 7581695647..c3b726e93e 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -741,7 +741,7 @@ pull_up_sublinks_jointree_recurse(PlannerInfo *root, Node *jtnode, * Make a modifiable copy of join node, but don't bother copying its * subnodes (yet). */ - j = (JoinExpr *) palloc(sizeof(JoinExpr)); + j = palloc_object(JoinExpr); memcpy(j, jtnode, sizeof(JoinExpr)); jtlink = (Node *) j; @@ -3240,8 +3240,7 @@ reduce_outer_joins_pass1(Node *jtnode) { reduce_outer_joins_pass1_state *result; - result = (reduce_outer_joins_pass1_state *) - palloc(sizeof(reduce_outer_joins_pass1_state)); + result = palloc_object(reduce_outer_joins_pass1_state); result->relids = NULL; result->contains_outer = false; result->sub_states = NIL; @@ -3593,7 +3592,7 @@ report_reduced_full_join(reduce_outer_joins_pass2_state *state2, { reduce_outer_joins_partial_state *statep; - statep = palloc(sizeof(reduce_outer_joins_partial_state)); + statep = palloc_object(reduce_outer_joins_partial_state); statep->full_join_rti = rtindex; statep->unreduced_side = relids; state2->partial_reduced = lappend(state2->partial_reduced, statep); diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index f528f096a5..a01b02f3a7 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -1629,7 +1629,7 @@ generate_append_tlist(List *colTypes, List *colCollations, * If the inputs all agree on type and typmod of a particular column, use * that typmod; else use -1. */ - colTypmods = (int32 *) palloc(list_length(colTypes) * sizeof(int32)); + colTypmods = palloc_array(int32, list_length(colTypes)); foreach(tlistl, input_tlists) { diff --git a/src/backend/optimizer/util/appendinfo.c b/src/backend/optimizer/util/appendinfo.c index 69b8b0c2ae..271bb4e682 100644 --- a/src/backend/optimizer/util/appendinfo.c +++ b/src/backend/optimizer/util/appendinfo.c @@ -808,8 +808,7 @@ find_appinfos_by_relids(PlannerInfo *root, Relids relids, int *nappinfos) int i; /* Allocate an array that's certainly big enough */ - appinfos = (AppendRelInfo **) - palloc(sizeof(AppendRelInfo *) * bms_num_members(relids)); + appinfos = palloc_array(AppendRelInfo *, bms_num_members(relids)); i = -1; while ((i = bms_next_member(relids, i)) >= 0) diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index bda4c4eb29..ddafc21c81 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -239,7 +239,7 @@ contain_window_function(Node *clause) WindowFuncLists * find_window_functions(Node *clause, Index maxWinRef) { - WindowFuncLists *lists = palloc(sizeof(WindowFuncLists)); + WindowFuncLists *lists = palloc_object(WindowFuncLists); lists->numWindowFuncs = 0; lists->maxWinRef = maxWinRef; @@ -5744,8 +5744,8 @@ make_SAOP_expr(Oid oper, Node *leftexpr, Oid coltype, Oid arraycollid, get_typlenbyvalalign(coltype, &typlen, &typbyval, &typalign); - elems = (Datum *) palloc(sizeof(Datum) * list_length(exprs)); - nulls = (bool *) palloc(sizeof(bool) * list_length(exprs)); + elems = palloc_array(Datum, list_length(exprs)); + nulls = palloc_array(bool, list_length(exprs)); foreach_node(Const, value, exprs) { elems[i] = value->constvalue; diff --git a/src/backend/optimizer/util/extendplan.c b/src/backend/optimizer/util/extendplan.c index 03d32277ba..2bc4ad3263 100644 --- a/src/backend/optimizer/util/extendplan.c +++ b/src/backend/optimizer/util/extendplan.c @@ -98,10 +98,8 @@ SetPlannerGlobalExtensionState(PlannerGlobal *glob, int extension_id, int i; i = pg_nextpower2_32(extension_id + 1); - glob->extension_state = (void **) - repalloc0(glob->extension_state, - glob->extension_state_allocated * sizeof(void *), - i * sizeof(void *)); + glob->extension_state = repalloc0_array(glob->extension_state, void *, + glob->extension_state_allocated, i); glob->extension_state_allocated = i; } @@ -134,10 +132,8 @@ SetPlannerInfoExtensionState(PlannerInfo *root, int extension_id, int i; i = pg_nextpower2_32(extension_id + 1); - root->extension_state = (void **) - repalloc0(root->extension_state, - root->extension_state_allocated * sizeof(void *), - i * sizeof(void *)); + root->extension_state = repalloc0_array(root->extension_state, void *, + root->extension_state_allocated, i); root->extension_state_allocated = i; } @@ -172,10 +168,8 @@ SetRelOptInfoExtensionState(RelOptInfo *rel, int extension_id, int i; i = pg_nextpower2_32(extension_id + 1); - rel->extension_state = (void **) - repalloc0(rel->extension_state, - rel->extension_state_allocated * sizeof(void *), - i * sizeof(void *)); + rel->extension_state = repalloc0_array(rel->extension_state, void *, + rel->extension_state_allocated, i); rel->extension_state_allocated = i; } diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index ed0dac37f5..e553afb7f0 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -279,11 +279,11 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent, info->ncolumns = ncolumns = index->indnatts; info->nkeycolumns = nkeycolumns = index->indnkeyatts; - info->indexkeys = (int *) palloc(sizeof(int) * ncolumns); - info->indexcollations = (Oid *) palloc(sizeof(Oid) * nkeycolumns); - info->opfamily = (Oid *) palloc(sizeof(Oid) * nkeycolumns); - info->opcintype = (Oid *) palloc(sizeof(Oid) * nkeycolumns); - info->canreturn = (bool *) palloc(sizeof(bool) * ncolumns); + info->indexkeys = palloc_array(int, ncolumns); + info->indexcollations = palloc_array(Oid, nkeycolumns); + info->opfamily = palloc_array(Oid, nkeycolumns); + info->opcintype = palloc_array(Oid, nkeycolumns); + info->canreturn = palloc_array(bool, ncolumns); for (i = 0; i < ncolumns; i++) { @@ -336,8 +336,8 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent, Assert(amroutine->amcanorder); info->sortopfamily = info->opfamily; - info->reverse_sort = (bool *) palloc(sizeof(bool) * nkeycolumns); - info->nulls_first = (bool *) palloc(sizeof(bool) * nkeycolumns); + info->reverse_sort = palloc_array(bool, nkeycolumns); + info->nulls_first = palloc_array(bool, nkeycolumns); for (i = 0; i < nkeycolumns; i++) { @@ -360,9 +360,9 @@ get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent, * corresponding btree opfamily for each opfamily of the * other index type. */ - info->sortopfamily = (Oid *) palloc(sizeof(Oid) * nkeycolumns); - info->reverse_sort = (bool *) palloc(sizeof(bool) * nkeycolumns); - info->nulls_first = (bool *) palloc(sizeof(bool) * nkeycolumns); + info->sortopfamily = palloc_array(Oid, nkeycolumns); + info->reverse_sort = palloc_array(bool, nkeycolumns); + info->nulls_first = palloc_array(bool, nkeycolumns); for (i = 0; i < nkeycolumns; i++) { @@ -2769,32 +2769,31 @@ find_partition_scheme(PlannerInfo *root, Relation relation) * array since the relcache entry may not survive after we have closed the * relation. */ - part_scheme = (PartitionScheme) palloc0(sizeof(PartitionSchemeData)); + part_scheme = palloc0_object(PartitionSchemeData); part_scheme->strategy = partkey->strategy; part_scheme->partnatts = partkey->partnatts; - part_scheme->partopfamily = (Oid *) palloc(sizeof(Oid) * partnatts); + part_scheme->partopfamily = palloc_array(Oid, partnatts); memcpy(part_scheme->partopfamily, partkey->partopfamily, sizeof(Oid) * partnatts); - part_scheme->partopcintype = (Oid *) palloc(sizeof(Oid) * partnatts); + part_scheme->partopcintype = palloc_array(Oid, partnatts); memcpy(part_scheme->partopcintype, partkey->partopcintype, sizeof(Oid) * partnatts); - part_scheme->partcollation = (Oid *) palloc(sizeof(Oid) * partnatts); + part_scheme->partcollation = palloc_array(Oid, partnatts); memcpy(part_scheme->partcollation, partkey->partcollation, sizeof(Oid) * partnatts); - part_scheme->parttyplen = (int16 *) palloc(sizeof(int16) * partnatts); + part_scheme->parttyplen = palloc_array(int16, partnatts); memcpy(part_scheme->parttyplen, partkey->parttyplen, sizeof(int16) * partnatts); - part_scheme->parttypbyval = (bool *) palloc(sizeof(bool) * partnatts); + part_scheme->parttypbyval = palloc_array(bool, partnatts); memcpy(part_scheme->parttypbyval, partkey->parttypbyval, sizeof(bool) * partnatts); - part_scheme->partsupfunc = (FmgrInfo *) - palloc(sizeof(FmgrInfo) * partnatts); + part_scheme->partsupfunc = palloc_array(FmgrInfo, partnatts); for (i = 0; i < partnatts; i++) fmgr_info_copy(&part_scheme->partsupfunc[i], &partkey->partsupfunc[i], CurrentMemoryContext); @@ -2828,7 +2827,7 @@ set_baserel_partition_key_exprs(Relation relation, Assert(partkey != NULL); partnatts = partkey->partnatts; - partexprs = (List **) palloc(sizeof(List *) * partnatts); + partexprs = palloc_array(List *, partnatts); lc = list_head(partkey->partexprs); for (cnt = 0; cnt < partnatts; cnt++) @@ -2869,7 +2868,7 @@ set_baserel_partition_key_exprs(Relation relation, * expression lists to keep partition key expression handling code simple. * See build_joinrel_partition_info() and match_expr_to_partition_keys(). */ - rel->nullable_partexprs = (List **) palloc0(sizeof(List *) * partnatts); + rel->nullable_partexprs = palloc0_array(List *, partnatts); } /* diff --git a/src/backend/optimizer/util/predtest.c b/src/backend/optimizer/util/predtest.c index ac28573cd0..0a14658ed7 100644 --- a/src/backend/optimizer/util/predtest.c +++ b/src/backend/optimizer/util/predtest.c @@ -967,7 +967,7 @@ arrayconst_startup_fn(Node *clause, PredIterInfo info) char elmalign; /* Create working state struct */ - state = (ArrayConstIterState *) palloc(sizeof(ArrayConstIterState)); + state = palloc_object(ArrayConstIterState); info->state = state; /* Deconstruct the array literal */ @@ -1046,7 +1046,7 @@ arrayexpr_startup_fn(Node *clause, PredIterInfo info) ArrayExpr *arrayexpr; /* Create working state struct */ - state = (ArrayExprIterState *) palloc(sizeof(ArrayExprIterState)); + state = palloc_object(ArrayExprIterState); info->state = state; /* Set up a dummy OpExpr to return as the per-item node */ diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c index 1158bc194c..405f4dae10 100644 --- a/src/backend/optimizer/util/relnode.c +++ b/src/backend/optimizer/util/relnode.c @@ -120,11 +120,11 @@ setup_simple_rel_arrays(PlannerInfo *root) * exist yet. It'll be filled by later calls to build_simple_rel(). */ root->simple_rel_array = (RelOptInfo **) - palloc0(size * sizeof(RelOptInfo *)); + palloc0_array(RelOptInfo *, size); /* simple_rte_array is an array equivalent of the rtable list */ root->simple_rte_array = (RangeTblEntry **) - palloc0(size * sizeof(RangeTblEntry *)); + palloc0_array(RangeTblEntry *, size); rti = 1; foreach(lc, root->parse->rtable) { @@ -141,7 +141,7 @@ setup_simple_rel_arrays(PlannerInfo *root) } root->append_rel_array = (AppendRelInfo **) - palloc0(size * sizeof(AppendRelInfo *)); + palloc0_array(AppendRelInfo *, size); /* * append_rel_array is filled with any already-existing AppendRelInfos, @@ -373,9 +373,9 @@ build_simple_rel(PlannerInfo *root, int relid, RelOptInfo *parent) rel->min_attr = 0; rel->max_attr = list_length(rte->eref->colnames); rel->attr_needed = (Relids *) - palloc0((rel->max_attr - rel->min_attr + 1) * sizeof(Relids)); + palloc0_array(Relids, rel->max_attr - rel->min_attr + 1); rel->attr_widths = (int32 *) - palloc0((rel->max_attr - rel->min_attr + 1) * sizeof(int32)); + palloc0_array(int32, rel->max_attr - rel->min_attr + 1); break; case RTE_RESULT: /* RTE_RESULT has no columns, nor could it have whole-row Var */ @@ -2486,9 +2486,8 @@ set_joinrel_partition_key_exprs(RelOptInfo *joinrel, PartitionScheme part_scheme = joinrel->part_scheme; int partnatts = part_scheme->partnatts; - joinrel->partexprs = (List **) palloc0(sizeof(List *) * partnatts); - joinrel->nullable_partexprs = - (List **) palloc0(sizeof(List *) * partnatts); + joinrel->partexprs = palloc0_array(List *, partnatts); + joinrel->nullable_partexprs = palloc0_array(List *, partnatts); /* * The joinrel's partition expressions are the same as those of the input diff --git a/src/backend/optimizer/util/tlist.c b/src/backend/optimizer/util/tlist.c index d2b4ecc5e5..af7b19be5c 100644 --- a/src/backend/optimizer/util/tlist.c +++ b/src/backend/optimizer/util/tlist.c @@ -467,7 +467,7 @@ extract_grouping_ops(List *groupClause) Oid *groupOperators; ListCell *glitem; - groupOperators = (Oid *) palloc(sizeof(Oid) * numCols); + groupOperators = palloc_array(Oid, numCols); foreach(glitem, groupClause) { @@ -493,7 +493,7 @@ extract_grouping_collations(List *groupClause, List *tlist) Oid *grpCollations; ListCell *glitem; - grpCollations = (Oid *) palloc(sizeof(Oid) * numCols); + grpCollations = palloc_array(Oid, numCols); foreach(glitem, groupClause) { @@ -518,7 +518,7 @@ extract_grouping_cols(List *groupClause, List *tlist) int colno = 0; ListCell *glitem; - grpColIdx = (AttrNumber *) palloc(sizeof(AttrNumber) * numCols); + grpColIdx = palloc_array(AttrNumber, numCols); foreach(glitem, groupClause) { @@ -1089,7 +1089,7 @@ split_pathtarget_walker(Node *node, split_pathtarget_context *context) */ if (list_member(context->input_target_exprs, node)) { - split_pathtarget_item *item = palloc(sizeof(split_pathtarget_item)); + split_pathtarget_item *item = palloc_object(split_pathtarget_item); item->expr = node; item->sortgroupref = context->current_sgref; @@ -1109,7 +1109,7 @@ split_pathtarget_walker(Node *node, split_pathtarget_context *context) IsA(node, GroupingFunc) || IsA(node, WindowFunc)) { - split_pathtarget_item *item = palloc(sizeof(split_pathtarget_item)); + split_pathtarget_item *item = palloc_object(split_pathtarget_item); item->expr = node; item->sortgroupref = context->current_sgref; @@ -1124,7 +1124,7 @@ split_pathtarget_walker(Node *node, split_pathtarget_context *context) */ if (IS_SRF_CALL(node)) { - split_pathtarget_item *item = palloc(sizeof(split_pathtarget_item)); + split_pathtarget_item *item = palloc_object(split_pathtarget_item); List *save_input_vars = context->current_input_vars; List *save_input_srfs = context->current_input_srfs; int save_current_depth = context->current_depth; diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 05314e7e76..92be345d9a 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -2641,8 +2641,7 @@ addNSItemForReturning(ParseState *pstate, const char *aliasname, colnames = pstate->p_target_nsitem->p_rte->eref->colnames; numattrs = list_length(colnames); - nscolumns = (ParseNamespaceColumn *) - palloc(numattrs * sizeof(ParseNamespaceColumn)); + nscolumns = palloc_array(ParseNamespaceColumn, numattrs); memcpy(nscolumns, pstate->p_target_nsitem->p_nscolumns, numattrs * sizeof(ParseNamespaceColumn)); @@ -2652,7 +2651,7 @@ addNSItemForReturning(ParseState *pstate, const char *aliasname, nscolumns[i].p_varreturningtype = returning_type; /* build the nsitem, copying most fields from the target relation */ - nsitem = (ParseNamespaceItem *) palloc(sizeof(ParseNamespaceItem)); + nsitem = palloc_object(ParseNamespaceItem); nsitem->p_names = makeAlias(aliasname, colnames); nsitem->p_rte = pstate->p_target_nsitem->p_rte; nsitem->p_rtindex = pstate->p_target_nsitem->p_rtindex; diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index c3a0a354a9..7856ce9d78 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -4555,19 +4555,19 @@ OptWhereClause: key_actions: key_update { - KeyActions *n = palloc(sizeof(KeyActions)); + KeyActions *n = palloc_object(KeyActions); n->updateAction = $1; - n->deleteAction = palloc(sizeof(KeyAction)); + n->deleteAction = palloc_object(KeyAction); n->deleteAction->action = FKCONSTR_ACTION_NOACTION; n->deleteAction->cols = NIL; $$ = n; } | key_delete { - KeyActions *n = palloc(sizeof(KeyActions)); + KeyActions *n = palloc_object(KeyActions); - n->updateAction = palloc(sizeof(KeyAction)); + n->updateAction = palloc_object(KeyAction); n->updateAction->action = FKCONSTR_ACTION_NOACTION; n->updateAction->cols = NIL; n->deleteAction = $1; @@ -4575,7 +4575,7 @@ key_actions: } | key_update key_delete { - KeyActions *n = palloc(sizeof(KeyActions)); + KeyActions *n = palloc_object(KeyActions); n->updateAction = $1; n->deleteAction = $2; @@ -4583,7 +4583,7 @@ key_actions: } | key_delete key_update { - KeyActions *n = palloc(sizeof(KeyActions)); + KeyActions *n = palloc_object(KeyActions); n->updateAction = $2; n->deleteAction = $1; @@ -4591,12 +4591,12 @@ key_actions: } | /*EMPTY*/ { - KeyActions *n = palloc(sizeof(KeyActions)); + KeyActions *n = palloc_object(KeyActions); - n->updateAction = palloc(sizeof(KeyAction)); + n->updateAction = palloc_object(KeyAction); n->updateAction->action = FKCONSTR_ACTION_NOACTION; n->updateAction->cols = NIL; - n->deleteAction = palloc(sizeof(KeyAction)); + n->deleteAction = palloc_object(KeyAction); n->deleteAction->action = FKCONSTR_ACTION_NOACTION; n->deleteAction->cols = NIL; $$ = n; @@ -4624,7 +4624,7 @@ key_delete: ON DELETE_P key_action key_action: NO ACTION { - KeyAction *n = palloc(sizeof(KeyAction)); + KeyAction *n = palloc_object(KeyAction); n->action = FKCONSTR_ACTION_NOACTION; n->cols = NIL; @@ -4632,7 +4632,7 @@ key_action: } | RESTRICT { - KeyAction *n = palloc(sizeof(KeyAction)); + KeyAction *n = palloc_object(KeyAction); n->action = FKCONSTR_ACTION_RESTRICT; n->cols = NIL; @@ -4640,7 +4640,7 @@ key_action: } | CASCADE { - KeyAction *n = palloc(sizeof(KeyAction)); + KeyAction *n = palloc_object(KeyAction); n->action = FKCONSTR_ACTION_CASCADE; n->cols = NIL; @@ -4648,7 +4648,7 @@ key_action: } | SET NULL_P opt_column_list { - KeyAction *n = palloc(sizeof(KeyAction)); + KeyAction *n = palloc_object(KeyAction); n->action = FKCONSTR_ACTION_SETNULL; n->cols = $3; @@ -4656,7 +4656,7 @@ key_action: } | SET DEFAULT opt_column_list { - KeyAction *n = palloc(sizeof(KeyAction)); + KeyAction *n = palloc_object(KeyAction); n->action = FKCONSTR_ACTION_SETDEFAULT; n->cols = $3; @@ -5853,7 +5853,7 @@ import_qualification_type: import_qualification: import_qualification_type '(' relation_expr_list ')' { - ImportQual *n = (ImportQual *) palloc(sizeof(ImportQual)); + ImportQual *n = palloc_object(ImportQual); n->type = $1; n->table_names = $3; @@ -5861,7 +5861,7 @@ import_qualification: } | /*EMPTY*/ { - ImportQual *n = (ImportQual *) palloc(sizeof(ImportQual)); + ImportQual *n = palloc_object(ImportQual); n->type = FDW_IMPORT_SCHEMA_ALL; n->table_names = NIL; $$ = n; @@ -7914,7 +7914,7 @@ parameter_name: privilege_target: qualified_name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_TABLE; @@ -7923,7 +7923,7 @@ privilege_target: } | TABLE qualified_name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_TABLE; @@ -7932,7 +7932,7 @@ privilege_target: } | SEQUENCE qualified_name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_SEQUENCE; @@ -7941,7 +7941,7 @@ privilege_target: } | FOREIGN DATA_P WRAPPER name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_FDW; @@ -7950,7 +7950,7 @@ privilege_target: } | FOREIGN SERVER name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_FOREIGN_SERVER; @@ -7959,7 +7959,7 @@ privilege_target: } | FUNCTION function_with_argtypes_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_FUNCTION; @@ -7968,7 +7968,7 @@ privilege_target: } | PROCEDURE function_with_argtypes_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_PROCEDURE; @@ -7977,7 +7977,7 @@ privilege_target: } | ROUTINE function_with_argtypes_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_ROUTINE; @@ -7986,7 +7986,7 @@ privilege_target: } | DATABASE name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_DATABASE; @@ -7995,7 +7995,7 @@ privilege_target: } | DOMAIN_P any_name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_DOMAIN; @@ -8004,7 +8004,7 @@ privilege_target: } | LANGUAGE name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_LANGUAGE; @@ -8013,7 +8013,7 @@ privilege_target: } | LARGE_P OBJECT_P NumericOnly_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_LARGEOBJECT; @@ -8022,7 +8022,7 @@ privilege_target: } | PARAMETER parameter_name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_PARAMETER_ACL; n->objs = $2; @@ -8030,7 +8030,7 @@ privilege_target: } | SCHEMA name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_SCHEMA; @@ -8039,7 +8039,7 @@ privilege_target: } | TABLESPACE name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_TABLESPACE; @@ -8048,7 +8048,7 @@ privilege_target: } | TYPE_P any_name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_OBJECT; n->objtype = OBJECT_TYPE; @@ -8057,7 +8057,7 @@ privilege_target: } | ALL TABLES IN_P SCHEMA name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_ALL_IN_SCHEMA; n->objtype = OBJECT_TABLE; @@ -8066,7 +8066,7 @@ privilege_target: } | ALL SEQUENCES IN_P SCHEMA name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_ALL_IN_SCHEMA; n->objtype = OBJECT_SEQUENCE; @@ -8075,7 +8075,7 @@ privilege_target: } | ALL FUNCTIONS IN_P SCHEMA name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_ALL_IN_SCHEMA; n->objtype = OBJECT_FUNCTION; @@ -8084,7 +8084,7 @@ privilege_target: } | ALL PROCEDURES IN_P SCHEMA name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_ALL_IN_SCHEMA; n->objtype = OBJECT_PROCEDURE; @@ -8093,7 +8093,7 @@ privilege_target: } | ALL ROUTINES IN_P SCHEMA name_list { - PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + PrivTarget *n = palloc_object(PrivTarget); n->targtype = ACL_TARGET_ALL_IN_SCHEMA; n->objtype = OBJECT_ROUTINE; @@ -13393,7 +13393,7 @@ select_limit: } | offset_clause { - SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + SelectLimit *n = palloc_object(SelectLimit); n->limitOffset = $1; n->limitCount = NULL; @@ -13413,7 +13413,7 @@ opt_select_limit: limit_clause: LIMIT select_limit_value { - SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + SelectLimit *n = palloc_object(SelectLimit); n->limitOffset = NULL; n->limitCount = $2; @@ -13441,7 +13441,7 @@ limit_clause: */ | FETCH first_or_next select_fetch_first_value row_or_rows ONLY { - SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + SelectLimit *n = palloc_object(SelectLimit); n->limitOffset = NULL; n->limitCount = $3; @@ -13453,7 +13453,7 @@ limit_clause: } | FETCH first_or_next select_fetch_first_value row_or_rows WITH TIES { - SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + SelectLimit *n = palloc_object(SelectLimit); n->limitOffset = NULL; n->limitCount = $3; @@ -13465,7 +13465,7 @@ limit_clause: } | FETCH first_or_next row_or_rows ONLY { - SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + SelectLimit *n = palloc_object(SelectLimit); n->limitOffset = NULL; n->limitCount = makeIntConst(1, -1); @@ -13477,7 +13477,7 @@ limit_clause: } | FETCH first_or_next row_or_rows WITH TIES { - SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + SelectLimit *n = palloc_object(SelectLimit); n->limitOffset = NULL; n->limitCount = makeIntConst(1, -1); @@ -13572,7 +13572,7 @@ first_or_next: FIRST_P { $$ = 0; } group_clause: GROUP_P BY set_quantifier group_by_list { - GroupClause *n = (GroupClause *) palloc(sizeof(GroupClause)); + GroupClause *n = palloc_object(GroupClause); n->distinct = $3 == SET_QUANTIFIER_DISTINCT; n->all = false; @@ -13581,7 +13581,7 @@ group_clause: } | GROUP_P BY ALL { - GroupClause *n = (GroupClause *) palloc(sizeof(GroupClause)); + GroupClause *n = palloc_object(GroupClause); n->distinct = false; n->all = true; n->list = NIL; @@ -13589,7 +13589,7 @@ group_clause: } | /*EMPTY*/ { - GroupClause *n = (GroupClause *) palloc(sizeof(GroupClause)); + GroupClause *n = palloc_object(GroupClause); n->distinct = false; n->all = false; diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index ca26f6f61f..944482207f 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -733,7 +733,7 @@ transformRangeTableFunc(ParseState *pstate, RangeTableFunc *rtf) tf->ordinalitycol = -1; /* Process column specs */ - names = palloc(sizeof(char *) * list_length(rtf->columns)); + names = palloc_array(char *, list_length(rtf->columns)); colno = 0; foreach(col, rtf->columns) @@ -1573,7 +1573,7 @@ transformFromClauseItem(ParseState *pstate, Node *n, { ParseNamespaceItem *jnsitem; - jnsitem = (ParseNamespaceItem *) palloc(sizeof(ParseNamespaceItem)); + jnsitem = palloc_object(ParseNamespaceItem); jnsitem->p_names = j->join_using_alias; jnsitem->p_rte = nsitem->p_rte; jnsitem->p_rtindex = nsitem->p_rtindex; diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 4524e49c32..6b8fa15fca 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -2906,7 +2906,7 @@ make_row_comparison_op(ParseState *pstate, List *opname, * operators, and see which interpretations (cmptypes) exist for each * operator. */ - opinfo_lists = (List **) palloc(nopers * sizeof(List *)); + opinfo_lists = palloc_array(List *, nopers); cmptypes = NULL; i = 0; foreach(l, opexprs) @@ -3241,7 +3241,7 @@ getJsonEncodingConst(JsonFormat *format) { JsonEncoding encoding; const char *enc; - Name encname = palloc(sizeof(NameData)); + Name encname = palloc_object(NameData); if (!format || format->format_type == JS_FORMAT_DEFAULT || diff --git a/src/backend/parser/parse_node.c b/src/backend/parser/parse_node.c index 203b7a3217..cafeb87217 100644 --- a/src/backend/parser/parse_node.c +++ b/src/backend/parser/parse_node.c @@ -40,7 +40,7 @@ make_parsestate(ParseState *parentParseState) { ParseState *pstate; - pstate = palloc0(sizeof(ParseState)); + pstate = palloc0_object(ParseState); pstate->parentParseState = parentParseState; diff --git a/src/backend/parser/parse_param.c b/src/backend/parser/parse_param.c index 930921626b..772f3e3c1d 100644 --- a/src/backend/parser/parse_param.c +++ b/src/backend/parser/parse_param.c @@ -68,7 +68,7 @@ void setup_parse_fixed_parameters(ParseState *pstate, const Oid *paramTypes, int numParams) { - FixedParamState *parstate = palloc(sizeof(FixedParamState)); + FixedParamState *parstate = palloc_object(FixedParamState); parstate->paramTypes = paramTypes; parstate->numParams = numParams; @@ -84,7 +84,7 @@ void setup_parse_variable_parameters(ParseState *pstate, Oid **paramTypes, int *numParams) { - VarParamState *parstate = palloc(sizeof(VarParamState)); + VarParamState *parstate = palloc_object(VarParamState); parstate->paramTypes = paramTypes; parstate->numParams = numParams; diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index d544a69fc8..dd64f45478 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -964,7 +964,7 @@ searchRangeTableForCol(ParseState *pstate, const char *alias, const char *colnam int location) { ParseState *orig_pstate = pstate; - FuzzyAttrMatchState *fuzzystate = palloc(sizeof(FuzzyAttrMatchState)); + FuzzyAttrMatchState *fuzzystate = palloc_object(FuzzyAttrMatchState); fuzzystate->distance = MAX_FUZZY_DISTANCE + 1; fuzzystate->rfirst = NULL; @@ -1336,7 +1336,7 @@ buildNSItemFromTupleDesc(RangeTblEntry *rte, Index rtindex, } /* ... and build the nsitem */ - nsitem = (ParseNamespaceItem *) palloc(sizeof(ParseNamespaceItem)); + nsitem = palloc_object(ParseNamespaceItem); nsitem->p_names = rte->eref; nsitem->p_rte = rte; nsitem->p_rtindex = rtindex; @@ -1400,7 +1400,7 @@ buildNSItemFromLists(RangeTblEntry *rte, Index rtindex, } /* ... and build the nsitem */ - nsitem = (ParseNamespaceItem *) palloc(sizeof(ParseNamespaceItem)); + nsitem = palloc_object(ParseNamespaceItem); nsitem->p_names = rte->eref; nsitem->p_rte = rte; nsitem->p_rtindex = rtindex; @@ -1791,7 +1791,7 @@ addRangeTableEntryForFunction(ParseState *pstate, rte->eref = eref; /* Process each function ... */ - functupdescs = (TupleDesc *) palloc(nfuncs * sizeof(TupleDesc)); + functupdescs = palloc_array(TupleDesc, nfuncs); totalatts = 0; funcno = 0; @@ -2302,7 +2302,7 @@ addRangeTableEntryForJoin(ParseState *pstate, * Build a ParseNamespaceItem, but don't add it to the pstate's namespace * list --- caller must do that if appropriate. */ - nsitem = (ParseNamespaceItem *) palloc(sizeof(ParseNamespaceItem)); + nsitem = palloc_object(ParseNamespaceItem); nsitem->p_names = rte->eref; nsitem->p_rte = rte; nsitem->p_perminfo = NULL; diff --git a/src/backend/parser/parse_type.c b/src/backend/parser/parse_type.c index e07d65fc25..9d7aa6967d 100644 --- a/src/backend/parser/parse_type.c +++ b/src/backend/parser/parse_type.c @@ -369,7 +369,7 @@ typenameTypeMod(ParseState *pstate, const TypeName *typeName, Type typ) * Currently, we allow simple numeric constants, string literals, and * identifiers; possibly this list could be extended. */ - datums = (Datum *) palloc(list_length(typeName->typmods) * sizeof(Datum)); + datums = palloc_array(Datum, list_length(typeName->typmods)); n = 0; foreach(l, typeName->typmods) { diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 8ba038c5ef..40ac700d52 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -319,7 +319,7 @@ partition_bounds_create(PartitionBoundSpec **boundspecs, int nparts, * Initialize mapping array with invalid values, this is filled within * each sub-routine below depending on the bound type. */ - *mapping = (int *) palloc(sizeof(int) * nparts); + *mapping = palloc_array(int, nparts); for (i = 0; i < nparts; i++) (*mapping)[i] = -1; @@ -353,15 +353,13 @@ create_hash_bounds(PartitionBoundSpec **boundspecs, int nparts, int greatest_modulus; Datum *boundDatums; - boundinfo = (PartitionBoundInfoData *) - palloc0(sizeof(PartitionBoundInfoData)); + boundinfo = palloc0_object(PartitionBoundInfoData); boundinfo->strategy = key->strategy; /* No special hash partitions. */ boundinfo->null_index = -1; boundinfo->default_index = -1; - hbounds = (PartitionHashBound *) - palloc(nparts * sizeof(PartitionHashBound)); + hbounds = palloc_array(PartitionHashBound, nparts); /* Convert from node to the internal representation */ for (i = 0; i < nparts; i++) @@ -384,7 +382,7 @@ create_hash_bounds(PartitionBoundSpec **boundspecs, int nparts, greatest_modulus = hbounds[nparts - 1].modulus; boundinfo->ndatums = nparts; - boundinfo->datums = (Datum **) palloc0(nparts * sizeof(Datum *)); + boundinfo->datums = palloc0_array(Datum *, nparts); boundinfo->kind = NULL; boundinfo->interleaved_parts = NULL; boundinfo->nindexes = greatest_modulus; @@ -472,8 +470,7 @@ create_list_bounds(PartitionBoundSpec **boundspecs, int nparts, int null_index = -1; Datum *boundDatums; - boundinfo = (PartitionBoundInfoData *) - palloc0(sizeof(PartitionBoundInfoData)); + boundinfo = palloc0_object(PartitionBoundInfoData); boundinfo->strategy = key->strategy; /* Will be set correctly below. */ boundinfo->null_index = -1; @@ -533,7 +530,7 @@ create_list_bounds(PartitionBoundSpec **boundspecs, int nparts, qsort_partition_list_value_cmp, key); boundinfo->ndatums = ndatums; - boundinfo->datums = (Datum **) palloc0(ndatums * sizeof(Datum *)); + boundinfo->datums = palloc0_array(Datum *, ndatums); boundinfo->kind = NULL; boundinfo->interleaved_parts = NULL; boundinfo->nindexes = ndatums; @@ -690,16 +687,14 @@ create_range_bounds(PartitionBoundSpec **boundspecs, int nparts, Datum *boundDatums; PartitionRangeDatumKind *boundKinds; - boundinfo = (PartitionBoundInfoData *) - palloc0(sizeof(PartitionBoundInfoData)); + boundinfo = palloc0_object(PartitionBoundInfoData); boundinfo->strategy = key->strategy; /* There is no special null-accepting range partition. */ boundinfo->null_index = -1; /* Will be set correctly below. */ boundinfo->default_index = -1; - all_bounds = (PartitionRangeBound **) - palloc0(2 * nparts * sizeof(PartitionRangeBound *)); + all_bounds = palloc0_array(PartitionRangeBound *, 2 * nparts); /* Create a unified list of range bounds across all the partitions. */ ndatums = 0; @@ -803,10 +798,8 @@ create_range_bounds(PartitionBoundSpec **boundspecs, int nparts, * bound. */ boundinfo->ndatums = ndatums; - boundinfo->datums = (Datum **) palloc0(ndatums * sizeof(Datum *)); - boundinfo->kind = (PartitionRangeDatumKind **) - palloc(ndatums * - sizeof(PartitionRangeDatumKind *)); + boundinfo->datums = palloc0_array(Datum *, ndatums); + boundinfo->kind = palloc0_array(PartitionRangeDatumKind *, ndatums); boundinfo->interleaved_parts = NULL; /* @@ -814,7 +807,7 @@ create_range_bounds(PartitionBoundSpec **boundspecs, int nparts, * element of the indexes[] array. */ boundinfo->nindexes = ndatums + 1; - boundinfo->indexes = (int *) palloc((ndatums + 1) * sizeof(int)); + boundinfo->indexes = palloc_array(int, (ndatums + 1)); /* * In the loop below, to save from allocating a series of small arrays, @@ -824,8 +817,7 @@ create_range_bounds(PartitionBoundSpec **boundspecs, int nparts, */ partnatts = key->partnatts; boundDatums = (Datum *) palloc(ndatums * partnatts * sizeof(Datum)); - boundKinds = (PartitionRangeDatumKind *) palloc(ndatums * partnatts * - sizeof(PartitionRangeDatumKind)); + boundKinds = palloc_array(PartitionRangeDatumKind, ndatums * partnatts); for (i = 0; i < ndatums; i++) { @@ -1008,7 +1000,7 @@ partition_bounds_copy(PartitionBoundInfo src, int nindexes; int partnatts; - dest = (PartitionBoundInfo) palloc(sizeof(PartitionBoundInfoData)); + dest = (PartitionBoundInfo) palloc_object(PartitionBoundInfoData); dest->strategy = src->strategy; ndatums = dest->ndatums = src->ndatums; @@ -1018,7 +1010,7 @@ partition_bounds_copy(PartitionBoundInfo src, /* List partitioned tables have only a single partition key. */ Assert(key->strategy != PARTITION_STRATEGY_LIST || partnatts == 1); - dest->datums = (Datum **) palloc(sizeof(Datum *) * ndatums); + dest->datums = palloc_array(Datum *, ndatums); if (src->kind != NULL && ndatums > 0) { @@ -1092,7 +1084,7 @@ partition_bounds_copy(PartitionBoundInfo src, } } - dest->indexes = (int *) palloc(sizeof(int) * nindexes); + dest->indexes = palloc_array(int, nindexes); memcpy(dest->indexes, src->indexes, sizeof(int) * nindexes); dest->null_index = src->null_index; @@ -1815,10 +1807,10 @@ init_partition_map(RelOptInfo *rel, PartitionMap *map) int i; map->nparts = nparts; - map->merged_indexes = (int *) palloc(sizeof(int) * nparts); - map->merged = (bool *) palloc(sizeof(bool) * nparts); + map->merged_indexes = palloc_array(int, nparts); + map->merged = palloc_array(bool, nparts); map->did_remapping = false; - map->old_indexes = (int *) palloc(sizeof(int) * nparts); + map->old_indexes = palloc_array(int, nparts); for (i = 0; i < nparts; i++) { map->merged_indexes[i] = map->old_indexes[i] = -1; @@ -2393,7 +2385,7 @@ fix_merged_indexes(PartitionMap *outer_map, PartitionMap *inner_map, Assert(nmerged > 0); - new_indexes = (int *) palloc(sizeof(int) * nmerged); + new_indexes = palloc_array(int, nmerged); for (i = 0; i < nmerged; i++) new_indexes[i] = -1; @@ -2453,8 +2445,8 @@ generate_matching_part_pairs(RelOptInfo *outer_rel, RelOptInfo *inner_rel, Assert(*outer_parts == NIL); Assert(*inner_parts == NIL); - outer_indexes = (int *) palloc(sizeof(int) * nmerged); - inner_indexes = (int *) palloc(sizeof(int) * nmerged); + outer_indexes = palloc_array(int, nmerged); + inner_indexes = palloc_array(int, nmerged); for (i = 0; i < nmerged; i++) outer_indexes[i] = inner_indexes[i] = -1; @@ -2525,11 +2517,11 @@ build_merged_partition_bounds(char strategy, List *merged_datums, int pos; ListCell *lc; - merged_bounds = (PartitionBoundInfo) palloc(sizeof(PartitionBoundInfoData)); + merged_bounds = palloc_object(PartitionBoundInfoData); merged_bounds->strategy = strategy; merged_bounds->ndatums = ndatums; - merged_bounds->datums = (Datum **) palloc(sizeof(Datum *) * ndatums); + merged_bounds->datums = palloc_array(Datum *, ndatums); pos = 0; foreach(lc, merged_datums) merged_bounds->datums[pos++] = (Datum *) lfirst(lc); @@ -2537,8 +2529,7 @@ build_merged_partition_bounds(char strategy, List *merged_datums, if (strategy == PARTITION_STRATEGY_RANGE) { Assert(list_length(merged_kinds) == ndatums); - merged_bounds->kind = (PartitionRangeDatumKind **) - palloc(sizeof(PartitionRangeDatumKind *) * ndatums); + merged_bounds->kind = palloc_array(PartitionRangeDatumKind *, ndatums); pos = 0; foreach(lc, merged_kinds) merged_bounds->kind[pos++] = (PartitionRangeDatumKind *) lfirst(lc); @@ -2559,7 +2550,7 @@ build_merged_partition_bounds(char strategy, List *merged_datums, Assert(list_length(merged_indexes) == ndatums); merged_bounds->nindexes = ndatums; - merged_bounds->indexes = (int *) palloc(sizeof(int) * ndatums); + merged_bounds->indexes = palloc_array(int, ndatums); pos = 0; foreach(lc, merged_indexes) merged_bounds->indexes[pos++] = lfirst_int(lc); @@ -3434,11 +3425,10 @@ make_one_partition_rbound(PartitionKey key, int index, List *datums, bool lower) Assert(datums != NIL); - bound = (PartitionRangeBound *) palloc0(sizeof(PartitionRangeBound)); + bound = palloc0_object(PartitionRangeBound); bound->index = index; - bound->datums = (Datum *) palloc0(key->partnatts * sizeof(Datum)); - bound->kind = (PartitionRangeDatumKind *) palloc0(key->partnatts * - sizeof(PartitionRangeDatumKind)); + bound->datums = palloc0_array(Datum, key->partnatts); + bound->kind = palloc0_array(PartitionRangeDatumKind, key->partnatts); bound->lower = lower; i = 0; diff --git a/src/backend/partitioning/partdesc.c b/src/backend/partitioning/partdesc.c index 328b4d450e..5624f503fe 100644 --- a/src/backend/partitioning/partdesc.c +++ b/src/backend/partitioning/partdesc.c @@ -426,7 +426,7 @@ CreatePartitionDirectory(MemoryContext mcxt, bool omit_detached) PartitionDirectory pdir; HASHCTL ctl; - pdir = palloc(sizeof(PartitionDirectoryData)); + pdir = palloc_object(PartitionDirectoryData); pdir->pdir_mcxt = mcxt; ctl.keysize = sizeof(Oid); diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index f4830f896f..1bd3924e35 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -1865,7 +1865,7 @@ get_database_list(void) */ oldcxt = MemoryContextSwitchTo(resultcxt); - avdb = (avw_dbase *) palloc(sizeof(avw_dbase)); + avdb = palloc_object(avw_dbase); avdb->adw_datid = pgdatabase->oid; avdb->adw_name = pstrdup(NameStr(pgdatabase->datname)); @@ -2753,7 +2753,7 @@ extract_autovac_opts(HeapTuple tup, TupleDesc pg_class_desc) if (relopts == NULL) return NULL; - av = palloc(sizeof(AutoVacOpts)); + av = palloc_object(AutoVacOpts); memcpy(av, &(((StdRdOptions *) relopts)->autovacuum), sizeof(AutoVacOpts)); pfree(relopts); @@ -2857,7 +2857,7 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map, ? avopts->multixact_freeze_table_age : default_multixact_freeze_table_age; - tab = palloc(sizeof(autovac_table)); + tab = palloc_object(autovac_table); tab->at_relid = relid; tab->at_sharedrel = classForm->relisshared; diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index 142a02eb5e..8e1068969a 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -1132,7 +1132,7 @@ RegisterDynamicBackgroundWorker(BackgroundWorker *worker, */ if (success && handle) { - *handle = palloc(sizeof(BackgroundWorkerHandle)); + *handle = palloc_object(BackgroundWorkerHandle); (*handle)->slot = slotno; (*handle)->generation = generation; } diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index afb3d6d863..7f8cf1fa2e 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -1318,7 +1318,7 @@ CompactCheckpointerRequestQueue(void) num_requests = CheckpointerShmem->num_requests; /* Initialize skip_slot array */ - skip_slot = palloc0(sizeof(bool) * max_requests); + skip_slot = palloc0_array(bool, max_requests); head = CheckpointerShmem->head; diff --git a/src/backend/postmaster/launch_backend.c b/src/backend/postmaster/launch_backend.c index 976638a58a..98f7c4848c 100644 --- a/src/backend/postmaster/launch_backend.c +++ b/src/backend/postmaster/launch_backend.c @@ -258,7 +258,7 @@ postmaster_child_launch(BackendType child_type, int child_slot, MyPMChildSlot = child_slot; if (client_sock) { - MyClientSocket = palloc(sizeof(ClientSocket)); + MyClientSocket = palloc_object(ClientSocket); memcpy(MyClientSocket, client_sock, sizeof(ClientSocket)); } diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c index ce6b529932..3a65d84172 100644 --- a/src/backend/postmaster/pgarch.c +++ b/src/backend/postmaster/pgarch.c @@ -257,7 +257,7 @@ PgArchiverMain(const void *startup_data, size_t startup_data_len) PgArch->pgprocno = MyProcNumber; /* Create workspace for pgarch_readyXlog() */ - arch_files = palloc(sizeof(struct arch_files_state)); + arch_files = palloc_object(struct arch_files_state); arch_files->arch_files_size = 0; /* Initialize our max-heap for prioritizing files to archive. */ @@ -945,7 +945,7 @@ LoadArchiveLibrary(void) ereport(ERROR, (errmsg("archive modules must register an archive callback"))); - archive_module_state = (ArchiveModuleState *) palloc0(sizeof(ArchiveModuleState)); + archive_module_state = palloc0_object(ArchiveModuleState); if (ArchiveCallbacks->startup_cb != NULL) ArchiveCallbacks->startup_cb(archive_module_state); diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index a956db4ad2..7dd3a201b1 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -4562,7 +4562,7 @@ pgwin32_register_deadchild_callback(HANDLE procHandle, DWORD procId) { win32_deadchild_waitinfo *childinfo; - childinfo = palloc(sizeof(win32_deadchild_waitinfo)); + childinfo = palloc_object(win32_deadchild_waitinfo); childinfo->procHandle = procHandle; childinfo->procId = procId; diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c index 50c2edec1f..526ad053a4 100644 --- a/src/backend/postmaster/syslogger.c +++ b/src/backend/postmaster/syslogger.c @@ -960,7 +960,7 @@ process_pipe_input(char *logbuffer, int *bytes_in_logbuffer) * Need a free slot, but there isn't one in the list, * so create a new one and extend the list with it. */ - free_slot = palloc(sizeof(save_buffer)); + free_slot = palloc_object(save_buffer); buffer_list = lappend(buffer_list, free_slot); buffer_lists[p.pid % NBUFFER_LISTS] = buffer_list; } diff --git a/src/backend/postmaster/walsummarizer.c b/src/backend/postmaster/walsummarizer.c index c4a888a081..e7e4d652f9 100644 --- a/src/backend/postmaster/walsummarizer.c +++ b/src/backend/postmaster/walsummarizer.c @@ -920,8 +920,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact, bool fast_forward = true; /* Initialize private data for xlogreader. */ - private_data = (SummarizerReadLocalXLogPrivate *) - palloc0(sizeof(SummarizerReadLocalXLogPrivate)); + private_data = palloc0_object(SummarizerReadLocalXLogPrivate); private_data->tli = tli; private_data->historic = XLogRecPtrIsValid(switch_lsn); private_data->read_upto = maximum_lsn; diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c index 239641bfbb..5ddc9e812e 100644 --- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c +++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c @@ -211,7 +211,7 @@ libpqrcv_connect(const char *conninfo, bool replication, bool logical, Assert(i < lengthof(keys)); - conn = palloc0(sizeof(WalReceiverConn)); + conn = palloc0_object(WalReceiverConn); conn->streamConn = libpqsrv_connect_params(keys, vals, /* expand_dbname = */ true, @@ -1102,7 +1102,7 @@ libpqrcv_exec(WalReceiverConn *conn, const char *query, const int nRetTypes, const Oid *retTypes) { PGresult *pgres = NULL; - WalRcvExecResult *walres = palloc0(sizeof(WalRcvExecResult)); + WalRcvExecResult *walres = palloc0_object(WalRcvExecResult); char *diag_sqlstate; if (MyDatabaseId == InvalidOid) diff --git a/src/backend/replication/logical/applyparallelworker.c b/src/backend/replication/logical/applyparallelworker.c index a4eb3962cb..a4aafcf5b6 100644 --- a/src/backend/replication/logical/applyparallelworker.c +++ b/src/backend/replication/logical/applyparallelworker.c @@ -425,7 +425,7 @@ pa_launch_parallel_worker(void) */ oldcontext = MemoryContextSwitchTo(ApplyContext); - winfo = (ParallelApplyWorkerInfo *) palloc0(sizeof(ParallelApplyWorkerInfo)); + winfo = palloc0_object(ParallelApplyWorkerInfo); /* Setup shared memory. */ if (!pa_setup_dsm(winfo)) diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index fdf1ccad46..3991e1495d 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -147,7 +147,7 @@ get_subscription_list(void) */ oldcxt = MemoryContextSwitchTo(resultcxt); - sub = (Subscription *) palloc0(sizeof(Subscription)); + sub = palloc0_object(Subscription); sub->oid = subform->oid; sub->dbid = subform->subdbid; sub->owner = subform->subowner; diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 866f92cf79..1b11ed63dc 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -172,7 +172,7 @@ StartupDecodingContext(List *output_plugin_options, "Logical decoding context", ALLOCSET_DEFAULT_SIZES); old_context = MemoryContextSwitchTo(context); - ctx = palloc0(sizeof(LogicalDecodingContext)); + ctx = palloc0_object(LogicalDecodingContext); ctx->context = context; diff --git a/src/backend/replication/logical/logicalfuncs.c b/src/backend/replication/logical/logicalfuncs.c index 25b2b79592..cf77ee28df 100644 --- a/src/backend/replication/logical/logicalfuncs.c +++ b/src/backend/replication/logical/logicalfuncs.c @@ -140,7 +140,7 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin arr = PG_GETARG_ARRAYTYPE_P(3); /* state to write output to */ - p = palloc0(sizeof(DecodingOutputState)); + p = palloc0_object(DecodingOutputState); p->binary_output = binary; diff --git a/src/backend/replication/logical/proto.c b/src/backend/replication/logical/proto.c index f0a913892b..27ad74fd75 100644 --- a/src/backend/replication/logical/proto.c +++ b/src/backend/replication/logical/proto.c @@ -697,7 +697,7 @@ logicalrep_write_rel(StringInfo out, TransactionId xid, Relation rel, LogicalRepRelation * logicalrep_read_rel(StringInfo in) { - LogicalRepRelation *rel = palloc(sizeof(LogicalRepRelation)); + LogicalRepRelation *rel = palloc_object(LogicalRepRelation); rel->remoteid = pq_getmsgint(in, 4); @@ -871,7 +871,7 @@ logicalrep_read_tuple(StringInfo in, LogicalRepTupleData *tuple) /* Allocate space for per-column values; zero out unused StringInfoDatas */ tuple->colvalues = (StringInfoData *) palloc0(natts * sizeof(StringInfoData)); - tuple->colstatus = (char *) palloc(natts * sizeof(char)); + tuple->colstatus = palloc_array(char, natts); tuple->ncols = natts; /* Read the data */ @@ -994,8 +994,8 @@ logicalrep_read_attrs(StringInfo in, LogicalRepRelation *rel) Bitmapset *attkeys = NULL; natts = pq_getmsgint(in, 2); - attnames = palloc(natts * sizeof(char *)); - atttyps = palloc(natts * sizeof(Oid)); + attnames = palloc_array(char *, natts); + atttyps = palloc_array(Oid, natts); /* read the attributes */ for (i = 0; i < natts; i++) diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c index 10b3d0d9b8..2c8485b881 100644 --- a/src/backend/replication/logical/relation.c +++ b/src/backend/replication/logical/relation.c @@ -188,8 +188,8 @@ logicalrep_relmap_update(LogicalRepRelation *remoterel) entry->remoterel.nspname = pstrdup(remoterel->nspname); entry->remoterel.relname = pstrdup(remoterel->relname); entry->remoterel.natts = remoterel->natts; - entry->remoterel.attnames = palloc(remoterel->natts * sizeof(char *)); - entry->remoterel.atttyps = palloc(remoterel->natts * sizeof(Oid)); + entry->remoterel.attnames = palloc_array(char *, remoterel->natts); + entry->remoterel.atttyps = palloc_array(Oid, remoterel->natts); for (i = 0; i < remoterel->natts; i++) { entry->remoterel.attnames[i] = pstrdup(remoterel->attnames[i]); @@ -704,8 +704,8 @@ logicalrep_partition_open(LogicalRepRelMapEntry *root, entry->remoterel.nspname = pstrdup(remoterel->nspname); entry->remoterel.relname = pstrdup(remoterel->relname); entry->remoterel.natts = remoterel->natts; - entry->remoterel.attnames = palloc(remoterel->natts * sizeof(char *)); - entry->remoterel.atttyps = palloc(remoterel->natts * sizeof(Oid)); + entry->remoterel.attnames = palloc_array(char *, remoterel->natts); + entry->remoterel.atttyps = palloc_array(Oid, remoterel->natts); for (i = 0; i < remoterel->natts; i++) { entry->remoterel.attnames[i] = pstrdup(remoterel->attnames[i]); diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index eb6a84554b..f18c6fb52b 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -3489,8 +3489,7 @@ ReorderBufferQueueInvalidations(ReorderBuffer *rb, TransactionId xid, change = ReorderBufferAllocChange(rb); change->action = REORDER_BUFFER_CHANGE_INVALIDATION; change->data.inval.ninvalidations = nmsgs; - change->data.inval.invalidations = (SharedInvalidationMessage *) - palloc(sizeof(SharedInvalidationMessage) * nmsgs); + change->data.inval.invalidations = palloc_array(SharedInvalidationMessage, nmsgs); memcpy(change->data.inval.invalidations, msgs, sizeof(SharedInvalidationMessage) * nmsgs); @@ -3511,8 +3510,7 @@ ReorderBufferAccumulateInvalidations(SharedInvalidationMessage **invals_out, if (*ninvals_out == 0) { *ninvals_out = nmsgs_new; - *invals_out = (SharedInvalidationMessage *) - palloc(sizeof(SharedInvalidationMessage) * nmsgs_new); + *invals_out = palloc_array(SharedInvalidationMessage, nmsgs_new); memcpy(*invals_out, msgs_new, sizeof(SharedInvalidationMessage) * nmsgs_new); } else @@ -3701,8 +3699,7 @@ ReorderBufferGetCatalogChangesXacts(ReorderBuffer *rb) return NULL; /* Initialize XID array */ - xids = (TransactionId *) palloc(sizeof(TransactionId) * - dclist_count(&rb->catchange_txns)); + xids = palloc_array(TransactionId, dclist_count(&rb->catchange_txns)); dclist_foreach(iter, &rb->catchange_txns) { ReorderBufferTXN *txn = dclist_container(ReorderBufferTXN, @@ -5124,9 +5121,9 @@ ReorderBufferToastReplace(ReorderBuffer *rb, ReorderBufferTXN *txn, toast_desc = RelationGetDescr(toast_rel); /* should we allocate from stack instead? */ - attrs = palloc0(sizeof(Datum) * desc->natts); - isnull = palloc0(sizeof(bool) * desc->natts); - free = palloc0(sizeof(bool) * desc->natts); + attrs = palloc0_array(Datum, desc->natts); + isnull = palloc0_array(bool, desc->natts); + free = palloc0_array(bool, desc->natts); newtup = change->data.tp.newtuple; @@ -5531,7 +5528,7 @@ UpdateLogicalMappings(HTAB *tuplecid_data, Oid relid, Snapshot snapshot) continue; /* ok, relevant, queue for apply */ - f = palloc(sizeof(RewriteMappingFile)); + f = palloc_object(RewriteMappingFile); f->lsn = f_lsn; strcpy(f->fname, mapping_de->d_name); files = lappend(files, f); diff --git a/src/backend/replication/logical/slotsync.c b/src/backend/replication/logical/slotsync.c index 7e3b4c4413..9f92c21237 100644 --- a/src/backend/replication/logical/slotsync.c +++ b/src/backend/replication/logical/slotsync.c @@ -919,7 +919,7 @@ synchronize_slots(WalReceiverConn *wrconn) while (tuplestore_gettupleslot(res->tuplestore, true, false, tupslot)) { bool isnull; - RemoteSlot *remote_slot = palloc0(sizeof(RemoteSlot)); + RemoteSlot *remote_slot = palloc0_object(RemoteSlot); Datum d; int col = 0; diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c index 6e18baa33c..d6ab1e017e 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -199,7 +199,7 @@ AllocateSnapshotBuilder(ReorderBuffer *reorder, ALLOCSET_DEFAULT_SIZES); oldcontext = MemoryContextSwitchTo(context); - builder = palloc0(sizeof(SnapBuild)); + builder = palloc0_object(SnapBuild); builder->state = SNAPBUILD_START; builder->context = context; @@ -486,8 +486,7 @@ SnapBuildInitialSnapshot(SnapBuild *builder) MyProc->xmin = snap->xmin; /* allocate in transaction context */ - newxip = (TransactionId *) - palloc(sizeof(TransactionId) * GetMaxSnapshotXidCount()); + newxip = palloc_array(TransactionId, GetMaxSnapshotXidCount()); /* * snapbuild.c builds transactions in an "inverted" manner, which means it diff --git a/src/backend/replication/logical/syncutils.c b/src/backend/replication/logical/syncutils.c index a696b1f2dc..332819804b 100644 --- a/src/backend/replication/logical/syncutils.c +++ b/src/backend/replication/logical/syncutils.c @@ -243,7 +243,7 @@ FetchRelationStates(bool *has_pending_subtables, has_subsequences_non_ready = true; else { - rstate = palloc(sizeof(SubscriptionRelState)); + rstate = palloc_object(SubscriptionRelState); memcpy(rstate, subrel, sizeof(SubscriptionRelState)); table_states_not_ready = lappend(table_states_not_ready, rstate); diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index a46f8e0644..fc64476a9e 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -875,7 +875,7 @@ create_edata_for_relation(LogicalRepRelMapEntry *rel) List *perminfos = NIL; ResultRelInfo *resultRelInfo; - edata = (ApplyExecutionData *) palloc0(sizeof(ApplyExecutionData)); + edata = palloc0_object(ApplyExecutionData); edata->targetRel = rel; edata->estate = estate = CreateExecutorState(); @@ -1702,7 +1702,7 @@ stream_start_internal(TransactionId xid, bool first_segment) oldctx = MemoryContextSwitchTo(ApplyContext); - MyLogicalRepWorker->stream_fileset = palloc(sizeof(FileSet)); + MyLogicalRepWorker->stream_fileset = palloc_object(FileSet); FileSetInit(MyLogicalRepWorker->stream_fileset); MemoryContextSwitchTo(oldctx); @@ -3951,7 +3951,7 @@ store_flush_position(XLogRecPtr remote_lsn, XLogRecPtr local_lsn) MemoryContextSwitchTo(ApplyContext); /* Track commit lsn */ - flushpos = (FlushPosition *) palloc(sizeof(FlushPosition)); + flushpos = palloc_object(FlushPosition); flushpos->local_end = local_lsn; flushpos->remote_end = remote_lsn; diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index 942e1abdb5..787998abb8 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -447,7 +447,7 @@ static void pgoutput_startup(LogicalDecodingContext *ctx, OutputPluginOptions *opt, bool is_init) { - PGOutputData *data = palloc0(sizeof(PGOutputData)); + PGOutputData *data = palloc0_object(PGOutputData); static bool publication_callback_registered = false; MemoryContextCallback *mcallback; @@ -468,7 +468,7 @@ pgoutput_startup(LogicalDecodingContext *ctx, OutputPluginOptions *opt, * Ensure to cleanup RelationSyncCache even when logical decoding invoked * via SQL interface ends up with an error. */ - mcallback = palloc0(sizeof(MemoryContextCallback)); + mcallback = palloc0_object(MemoryContextCallback); mcallback->func = pgoutput_memory_context_reset; MemoryContextRegisterResetCallback(ctx->context, mcallback); diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c index a0c79958fd..298a3766d7 100644 --- a/src/backend/replication/syncrep.c +++ b/src/backend/replication/syncrep.c @@ -705,9 +705,9 @@ SyncRepGetNthLatestSyncRecPtr(XLogRecPtr *writePtr, /* Should have enough candidates, or somebody messed up */ Assert(nth > 0 && nth <= num_standbys); - write_array = (XLogRecPtr *) palloc(sizeof(XLogRecPtr) * num_standbys); - flush_array = (XLogRecPtr *) palloc(sizeof(XLogRecPtr) * num_standbys); - apply_array = (XLogRecPtr *) palloc(sizeof(XLogRecPtr) * num_standbys); + write_array = palloc_array(XLogRecPtr, num_standbys); + flush_array = palloc_array(XLogRecPtr, num_standbys); + apply_array = palloc_array(XLogRecPtr, num_standbys); for (i = 0; i < num_standbys; i++) { @@ -757,8 +757,7 @@ SyncRepGetCandidateStandbys(SyncRepStandbyData **standbys) int n; /* Create result array */ - *standbys = (SyncRepStandbyData *) - palloc(max_wal_senders * sizeof(SyncRepStandbyData)); + *standbys = palloc_array(SyncRepStandbyData, max_wal_senders); /* Quick exit if sync replication is not requested */ if (SyncRepConfig == NULL) diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index 3a94c9683a..ac802ae85b 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -1450,8 +1450,8 @@ pg_stat_get_wal_receiver(PG_FUNCTION_ARGS) if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) elog(ERROR, "return type must be a row type"); - values = palloc0(sizeof(Datum) * tupdesc->natts); - nulls = palloc0(sizeof(bool) * tupdesc->natts); + values = palloc0_array(Datum, tupdesc->natts); + nulls = palloc0_array(bool, tupdesc->natts); /* Fetch values */ values[0] = Int32GetDatum(pid); diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 0564c99550..449632ad1a 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -3973,7 +3973,7 @@ WalSndGetStateString(WalSndState state) static Interval * offset_to_interval(TimeOffset offset) { - Interval *result = palloc(sizeof(Interval)); + Interval *result = palloc_object(Interval); result->month = 0; result->day = 0; diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index ffcf2ff1fe..688dcd09ca 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -4287,7 +4287,7 @@ RewriteQuery(Query *parsetree, List *rewrite_events, int orig_rt_length, RelationGetRelationName(rt_entry_relation)))); } - rev = (rewrite_event *) palloc(sizeof(rewrite_event)); + rev = palloc_object(rewrite_event); rev->relation = RelationGetRelid(rt_entry_relation); rev->event = event; rewrite_events = lappend(rewrite_events, rev); diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index 0fcd1fbd14..f3c2886ed5 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -1590,7 +1590,7 @@ map_variable_attnos_mutator(Node *node, var->varlevelsup == context->sublevels_up) { /* Found a matching variable, make the substitution */ - Var *newvar = (Var *) palloc(sizeof(Var)); + Var *newvar = palloc_object(Var); int attno = var->varattno; *newvar = *var; /* initially copy all fields of the Var */ @@ -1661,7 +1661,7 @@ map_variable_attnos_mutator(Node *node, context->to_rowtype != var->vartype) { ConvertRowtypeExpr *newnode; - Var *newvar = (Var *) palloc(sizeof(Var)); + Var *newvar = palloc_object(Var); /* whole-row variable, warn caller */ *(context->found_whole_row) = true; @@ -1674,7 +1674,7 @@ map_variable_attnos_mutator(Node *node, /* Var itself is changed to the requested type. */ newvar->vartype = context->to_rowtype; - newnode = (ConvertRowtypeExpr *) palloc(sizeof(ConvertRowtypeExpr)); + newnode = palloc_object(ConvertRowtypeExpr); *newnode = *r; /* initially copy all fields of the CRE */ newnode->arg = (Expr *) newvar; diff --git a/src/backend/snowball/dict_snowball.c b/src/backend/snowball/dict_snowball.c index e2b811a380..d3c022ae54 100644 --- a/src/backend/snowball/dict_snowball.c +++ b/src/backend/snowball/dict_snowball.c @@ -229,7 +229,7 @@ dsnowball_init(PG_FUNCTION_ARGS) bool stoploaded = false; ListCell *l; - d = (DictSnowball *) palloc0(sizeof(DictSnowball)); + d = palloc0_object(DictSnowball); foreach(l, dictoptions) { @@ -278,7 +278,7 @@ dsnowball_lexize(PG_FUNCTION_ARGS) char *in = (char *) PG_GETARG_POINTER(1); int32 len = PG_GETARG_INT32(2); char *txt = str_tolower(in, len, DEFAULT_COLLATION_OID); - TSLexeme *res = palloc0(sizeof(TSLexeme) * 2); + TSLexeme *res = palloc0_array(TSLexeme, 2); /* * Do not pass strings exceeding 1000 bytes to the stemmer, as they're diff --git a/src/backend/statistics/dependencies.c b/src/backend/statistics/dependencies.c index d7bf6b7e84..2aed867d5e 100644 --- a/src/backend/statistics/dependencies.c +++ b/src/backend/statistics/dependencies.c @@ -150,7 +150,7 @@ generate_dependencies_recurse(DependencyGenerator state, int index, static void generate_dependencies(DependencyGenerator state) { - AttrNumber *current = (AttrNumber *) palloc0(sizeof(AttrNumber) * state->k); + AttrNumber *current = palloc0_array(AttrNumber, state->k); generate_dependencies_recurse(state, 0, 0, current); @@ -171,8 +171,8 @@ DependencyGenerator_init(int n, int k) Assert((n >= k) && (k > 0)); /* allocate the DependencyGenerator state */ - state = (DependencyGenerator) palloc0(sizeof(DependencyGeneratorData)); - state->dependencies = (AttrNumber *) palloc(k * sizeof(AttrNumber)); + state = palloc0_object(DependencyGeneratorData); + state->dependencies = palloc_array(AttrNumber, k); state->ndependencies = 0; state->current = 0; @@ -237,7 +237,7 @@ dependency_degree(StatsBuildData *data, int k, AttrNumber *dependency) * Translate the array of indexes to regular attnums for the dependency * (we will need this to identify the columns in StatsBuildData). */ - attnums_dep = (AttrNumber *) palloc(k * sizeof(AttrNumber)); + attnums_dep = palloc_array(AttrNumber, k); for (i = 0; i < k; i++) attnums_dep[i] = data->attnums[dependency[i]]; @@ -402,8 +402,7 @@ statext_dependencies_build(StatsBuildData *data) /* initialize the list of dependencies */ if (dependencies == NULL) { - dependencies - = (MVDependencies *) palloc0(sizeof(MVDependencies)); + dependencies = palloc0_object(MVDependencies); dependencies->magic = STATS_DEPS_MAGIC; dependencies->type = STATS_DEPS_TYPE_BASIC; @@ -505,7 +504,7 @@ statext_dependencies_deserialize(bytea *data) VARSIZE_ANY_EXHDR(data), SizeOfHeader); /* read the MVDependencies header */ - dependencies = (MVDependencies *) palloc0(sizeof(MVDependencies)); + dependencies = palloc0_object(MVDependencies); /* initialize pointer to the data part (skip the varlena header) */ tmp = VARDATA_ANY(data); @@ -959,7 +958,7 @@ clauselist_apply_dependencies(PlannerInfo *root, List *clauses, * and mark all the corresponding clauses as estimated. */ nattrs = bms_num_members(attnums); - attr_sel = (Selectivity *) palloc(sizeof(Selectivity) * nattrs); + attr_sel = palloc_array(Selectivity, nattrs); attidx = 0; i = -1; @@ -1306,8 +1305,7 @@ dependencies_clauselist_selectivity(PlannerInfo *root, if (!has_stats_of_kind(rel->statlist, STATS_EXT_DEPENDENCIES)) return 1.0; - list_attnums = (AttrNumber *) palloc(sizeof(AttrNumber) * - list_length(clauses)); + list_attnums = palloc_array(AttrNumber, list_length(clauses)); /* * We allocate space as if every clause was a unique expression, although @@ -1315,7 +1313,7 @@ dependencies_clauselist_selectivity(PlannerInfo *root, * we'll translate to attnums, and there might be duplicates. But it's * easier and cheaper to just do one allocation than repalloc later. */ - unique_exprs = (Node **) palloc(sizeof(Node *) * list_length(clauses)); + unique_exprs = palloc_array(Node *, list_length(clauses)); unique_exprs_cnt = 0; /* @@ -1468,8 +1466,7 @@ dependencies_clauselist_selectivity(PlannerInfo *root, * make it just the right size, but it's likely wasteful anyway thanks to * moving the freed chunks to freelists etc. */ - func_dependencies = (MVDependencies **) palloc(sizeof(MVDependencies *) * - list_length(rel->statlist)); + func_dependencies = palloc_array(MVDependencies *, list_length(rel->statlist)); nfunc_dependencies = 0; total_ndeps = 0; @@ -1692,8 +1689,7 @@ dependencies_clauselist_selectivity(PlannerInfo *root, * Work out which dependencies we can apply, starting with the * widest/strongest ones, and proceeding to smaller/weaker ones. */ - dependencies = (MVDependency **) palloc(sizeof(MVDependency *) * - total_ndeps); + dependencies = palloc_array(MVDependency *, total_ndeps); ndependencies = 0; while (true) diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index f003d7b4a7..19778b773d 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -446,7 +446,7 @@ fetch_statentries_for_relation(Relation pg_statext, Oid relid) Form_pg_statistic_ext staForm; List *exprs = NIL; - entry = palloc0(sizeof(StatExtEntry)); + entry = palloc0_object(StatExtEntry); staForm = (Form_pg_statistic_ext) GETSTRUCT(htup); entry->statOid = staForm->oid; entry->schema = get_namespace_name(staForm->stxnamespace); @@ -532,7 +532,7 @@ examine_attribute(Node *expr) /* * Create the VacAttrStats struct. */ - stats = (VacAttrStats *) palloc0(sizeof(VacAttrStats)); + stats = palloc0_object(VacAttrStats); stats->attstattarget = -1; /* @@ -613,7 +613,7 @@ examine_expression(Node *expr, int stattarget) /* * Create the VacAttrStats struct. */ - stats = (VacAttrStats *) palloc0(sizeof(VacAttrStats)); + stats = palloc0_object(VacAttrStats); /* * We can't have statistics target specified for the expression, so we @@ -946,7 +946,7 @@ build_attnums_array(Bitmapset *attrs, int nexprs, int *numattrs) *numattrs = num; /* build attnums from the bitmapset */ - attnums = (AttrNumber *) palloc(sizeof(AttrNumber) * num); + attnums = palloc_array(AttrNumber, num); i = 0; j = -1; while ((j = bms_next_member(attrs, j)) >= 0) @@ -1028,7 +1028,7 @@ build_sorted_items(StatsBuildData *data, int *nitems, } /* build a local cache of typlen for all attributes */ - typlen = (int *) palloc(sizeof(int) * data->nattnums); + typlen = palloc_array(int, data->nattnums); for (i = 0; i < data->nattnums; i++) typlen[i] = get_typlen(data->stats[i]->attrtypid); @@ -1707,11 +1707,10 @@ statext_mcv_clauselist_selectivity(PlannerInfo *root, List *clauses, int varReli if (!has_stats_of_kind(rel->statlist, STATS_EXT_MCV)) return sel; - list_attnums = (Bitmapset **) palloc(sizeof(Bitmapset *) * - list_length(clauses)); + list_attnums = palloc_array(Bitmapset *, list_length(clauses)); /* expressions extracted from complex expressions */ - list_exprs = (List **) palloc(sizeof(Node *) * list_length(clauses)); + list_exprs = palloc_array(List *, list_length(clauses)); /* * Pre-process the clauses list to extract the attnums and expressions diff --git a/src/backend/statistics/mcv.c b/src/backend/statistics/mcv.c index 28f925f397..ec650ba029 100644 --- a/src/backend/statistics/mcv.c +++ b/src/backend/statistics/mcv.c @@ -270,7 +270,7 @@ statext_mcv_build(StatsBuildData *data, double totalrows, int stattarget) + sizeof(SortSupportData)); /* compute frequencies for values in each column */ - nfreqs = (int *) palloc0(sizeof(int) * numattrs); + nfreqs = palloc0_array(int, numattrs); freqs = build_column_frequencies(groups, ngroups, mss, nfreqs); /* @@ -294,8 +294,8 @@ statext_mcv_build(StatsBuildData *data, double totalrows, int stattarget) /* just point to the proper place in the list */ MCVItem *item = &mcvlist->items[i]; - item->values = (Datum *) palloc(sizeof(Datum) * numattrs); - item->isnull = (bool *) palloc(sizeof(bool) * numattrs); + item->values = palloc_array(Datum, numattrs); + item->isnull = palloc_array(bool, numattrs); /* copy values for the group */ memcpy(item->values, groups[i].values, sizeof(Datum) * numattrs); @@ -635,8 +635,8 @@ statext_mcv_serialize(MCVList *mcvlist, VacAttrStats **stats) char *endptr PG_USED_FOR_ASSERTS_ONLY; /* values per dimension (and number of non-NULL values) */ - Datum **values = (Datum **) palloc0(sizeof(Datum *) * ndims); - int *counts = (int *) palloc0(sizeof(int) * ndims); + Datum **values = palloc0_array(Datum *, ndims); + int *counts = palloc0_array(int, ndims); /* * We'll include some rudimentary information about the attribute types @@ -646,10 +646,10 @@ statext_mcv_serialize(MCVList *mcvlist, VacAttrStats **stats) * the statistics gets dropped automatically. We need to store the info * about the arrays of deduplicated values anyway. */ - info = (DimensionInfo *) palloc0(sizeof(DimensionInfo) * ndims); + info = palloc0_array(DimensionInfo, ndims); /* sort support data for all attributes included in the MCV list */ - ssup = (SortSupport) palloc0(sizeof(SortSupportData) * ndims); + ssup = palloc0_array(SortSupportData, ndims); /* collect and deduplicate values for each dimension (attribute) */ for (dim = 0; dim < ndims; dim++) @@ -668,7 +668,7 @@ statext_mcv_serialize(MCVList *mcvlist, VacAttrStats **stats) info[dim].typbyval = stats[dim]->attrtype->typbyval; /* allocate space for values in the attribute and collect them */ - values[dim] = (Datum *) palloc0(sizeof(Datum) * mcvlist->nitems); + values[dim] = palloc0_array(Datum, mcvlist->nitems); for (i = 0; i < mcvlist->nitems; i++) { @@ -1134,11 +1134,11 @@ statext_mcv_deserialize(bytea *data) * original values (it might go away). */ datalen = 0; /* space for by-ref data */ - map = (Datum **) palloc(ndims * sizeof(Datum *)); + map = palloc_array(Datum *, ndims); for (dim = 0; dim < ndims; dim++) { - map[dim] = (Datum *) palloc(sizeof(Datum) * info[dim].nvalues); + map[dim] = palloc_array(Datum, info[dim].nvalues); /* space needed for a copy of data for by-ref types */ datalen += info[dim].nbytes_aligned; @@ -1609,7 +1609,7 @@ mcv_get_match_bitmap(PlannerInfo *root, List *clauses, Assert(mcvlist->nitems > 0); Assert(mcvlist->nitems <= STATS_MCVLIST_MAX_ITEMS); - matches = palloc(sizeof(bool) * mcvlist->nitems); + matches = palloc_array(bool, mcvlist->nitems); memset(matches, !is_or, sizeof(bool) * mcvlist->nitems); /* @@ -2134,7 +2134,7 @@ mcv_clause_selectivity_or(PlannerInfo *root, StatisticExtInfo *stat, /* build the OR-matches bitmap, if not built already */ if (*or_matches == NULL) - *or_matches = palloc0(sizeof(bool) * mcv->nitems); + *or_matches = palloc0_array(bool, mcv->nitems); /* build the match bitmap for the new clause */ new_matches = mcv_get_match_bitmap(root, list_make1(clause), stat->keys, diff --git a/src/backend/storage/file/buffile.c b/src/backend/storage/file/buffile.c index 366d70d38a..4e520065ae 100644 --- a/src/backend/storage/file/buffile.c +++ b/src/backend/storage/file/buffile.c @@ -117,7 +117,7 @@ static File MakeNewFileSetSegment(BufFile *buffile, int segment); static BufFile * makeBufFileCommon(int nfiles) { - BufFile *file = (BufFile *) palloc(sizeof(BufFile)); + BufFile *file = palloc_object(BufFile); file->numFiles = nfiles; file->isInterXact = false; @@ -140,7 +140,7 @@ makeBufFile(File firstfile) { BufFile *file = makeBufFileCommon(1); - file->files = (File *) palloc(sizeof(File)); + file->files = palloc_object(File); file->files[0] = firstfile; file->readOnly = false; file->fileset = NULL; @@ -271,7 +271,7 @@ BufFileCreateFileSet(FileSet *fileset, const char *name) file = makeBufFileCommon(1); file->fileset = fileset; file->name = pstrdup(name); - file->files = (File *) palloc(sizeof(File)); + file->files = palloc_object(File); file->files[0] = MakeNewFileSetSegment(file, 0); file->readOnly = false; @@ -297,7 +297,7 @@ BufFileOpenFileSet(FileSet *fileset, const char *name, int mode, File *files; int nfiles = 0; - files = palloc(sizeof(File) * capacity); + files = palloc_array(File, capacity); /* * We don't know how many segments there are, so we'll probe the @@ -309,7 +309,7 @@ BufFileOpenFileSet(FileSet *fileset, const char *name, int mode, if (nfiles + 1 > capacity) { capacity *= 2; - files = repalloc(files, sizeof(File) * capacity); + files = repalloc_array(files, File, capacity); } /* Try to load a segment. */ FileSetSegmentName(segment_name, name, nfiles); diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 200f72c6e2..f3a1603204 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -1162,7 +1162,7 @@ ProcArrayApplyRecoveryInfo(RunningTransactions running) * Allocate a temporary array to avoid modifying the array passed as * argument. */ - xids = palloc(sizeof(TransactionId) * (running->xcnt + running->subxcnt)); + xids = palloc_array(TransactionId, running->xcnt + running->subxcnt); /* * Add to the temp array any xids which have not already completed. @@ -3012,8 +3012,7 @@ GetVirtualXIDsDelayingChkpt(int *nvxids, int type) Assert(type != 0); /* allocate what's certainly enough result space */ - vxids = (VirtualTransactionId *) - palloc(sizeof(VirtualTransactionId) * arrayP->maxProcs); + vxids = palloc_array(VirtualTransactionId, arrayP->maxProcs); LWLockAcquire(ProcArrayLock, LW_SHARED); @@ -3293,8 +3292,7 @@ GetCurrentVirtualXIDs(TransactionId limitXmin, bool excludeXmin0, int index; /* allocate what's certainly enough result space */ - vxids = (VirtualTransactionId *) - palloc(sizeof(VirtualTransactionId) * arrayP->maxProcs); + vxids = palloc_array(VirtualTransactionId, arrayP->maxProcs); LWLockAcquire(ProcArrayLock, LW_SHARED); diff --git a/src/backend/storage/ipc/shm_mq.c b/src/backend/storage/ipc/shm_mq.c index 2c79a649f4..9c888d3eb7 100644 --- a/src/backend/storage/ipc/shm_mq.c +++ b/src/backend/storage/ipc/shm_mq.c @@ -289,7 +289,7 @@ shm_mq_get_sender(shm_mq *mq) shm_mq_handle * shm_mq_attach(shm_mq *mq, dsm_segment *seg, BackgroundWorkerHandle *handle) { - shm_mq_handle *mqh = palloc(sizeof(shm_mq_handle)); + shm_mq_handle *mqh = palloc_object(shm_mq_handle); Assert(mq->mq_receiver == MyProc || mq->mq_sender == MyProc); mqh->mqh_queue = mq; diff --git a/src/backend/storage/ipc/shmem.c b/src/backend/storage/ipc/shmem.c index ee3408df30..7b63c7dc90 100644 --- a/src/backend/storage/ipc/shmem.c +++ b/src/backend/storage/ipc/shmem.c @@ -599,7 +599,7 @@ pg_get_shmem_allocations_numa(PG_FUNCTION_ARGS) InitMaterializedSRF(fcinfo, 0); max_nodes = pg_numa_get_max_node(); - nodes = palloc(sizeof(Size) * (max_nodes + 1)); + nodes = palloc_array(Size, max_nodes + 1); /* * Shared memory allocations can vary in size and may not align with OS @@ -624,8 +624,8 @@ pg_get_shmem_allocations_numa(PG_FUNCTION_ARGS) * them using only fraction of the total pages. */ shm_total_page_count = (ShmemSegHdr->totalsize / os_page_size) + 1; - page_ptrs = palloc0(sizeof(void *) * shm_total_page_count); - pages_status = palloc(sizeof(int) * shm_total_page_count); + page_ptrs = palloc0_array(void *, shm_total_page_count); + pages_status = palloc_array(int, shm_total_page_count); if (firstNumaTouch) elog(DEBUG1, "NUMA: page-faulting shared memory segments for proper NUMA readouts"); diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 9cb78ead10..9015ba3caf 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -3100,9 +3100,7 @@ GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode, int *countp) (MaxBackends + max_prepared_xacts + 1)); } else - vxids = (VirtualTransactionId *) - palloc0(sizeof(VirtualTransactionId) * - (MaxBackends + max_prepared_xacts + 1)); + vxids = palloc0_array(VirtualTransactionId, (MaxBackends + max_prepared_xacts + 1)); /* Compute hash code and partition lock, and look up conflicting modes. */ hashcode = LockTagHashCode(locktag); @@ -3801,12 +3799,12 @@ GetLockStatusData(void) int el; int i; - data = (LockData *) palloc(sizeof(LockData)); + data = palloc_object(LockData); /* Guess how much space we'll need. */ els = MaxBackends; el = 0; - data->locks = (LockInstanceData *) palloc(sizeof(LockInstanceData) * els); + data->locks = palloc_array(LockInstanceData, els); /* * First, we iterate through the per-backend fast-path arrays, locking @@ -4001,7 +3999,7 @@ GetBlockerStatusData(int blocked_pid) PGPROC *proc; int i; - data = (BlockedProcsData *) palloc(sizeof(BlockedProcsData)); + data = palloc_object(BlockedProcsData); /* * Guess how much space we'll need, and preallocate. Most of the time @@ -4011,9 +4009,9 @@ GetBlockerStatusData(int blocked_pid) */ data->nprocs = data->nlocks = data->npids = 0; data->maxprocs = data->maxlocks = data->maxpids = MaxBackends; - data->procs = (BlockedProcData *) palloc(sizeof(BlockedProcData) * data->maxprocs); - data->locks = (LockInstanceData *) palloc(sizeof(LockInstanceData) * data->maxlocks); - data->waiter_pids = (int *) palloc(sizeof(int) * data->maxpids); + data->procs = palloc_array(BlockedProcData, data->maxprocs); + data->locks = palloc_array(LockInstanceData, data->maxlocks); + data->waiter_pids = palloc_array(int, data->maxpids); /* * In order to search the ProcArray for blocked_pid and assume that that diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c index f12f8f77aa..149c69a187 100644 --- a/src/backend/storage/lmgr/predicate.c +++ b/src/backend/storage/lmgr/predicate.c @@ -1451,7 +1451,7 @@ GetPredicateLockStatusData(void) HASH_SEQ_STATUS seqstat; PREDICATELOCK *predlock; - data = (PredicateLockData *) palloc(sizeof(PredicateLockData)); + data = palloc_object(PredicateLockData); /* * To ensure consistency, take simultaneous locks on all partition locks @@ -1464,10 +1464,8 @@ GetPredicateLockStatusData(void) /* Get number of locks and allocate appropriately-sized arrays. */ els = hash_get_num_entries(PredicateLockHash); data->nelements = els; - data->locktags = (PREDICATELOCKTARGETTAG *) - palloc(sizeof(PREDICATELOCKTARGETTAG) * els); - data->xacts = (SERIALIZABLEXACT *) - palloc(sizeof(SERIALIZABLEXACT) * els); + data->locktags = palloc_array(PREDICATELOCKTARGETTAG, els); + data->xacts = palloc_array(SERIALIZABLEXACT, els); /* Scan through PredicateLockHash and copy contents */ diff --git a/src/backend/storage/smgr/bulk_write.c b/src/backend/storage/smgr/bulk_write.c index b958be1571..d43c30da48 100644 --- a/src/backend/storage/smgr/bulk_write.c +++ b/src/backend/storage/smgr/bulk_write.c @@ -101,7 +101,7 @@ smgr_bulk_start_smgr(SMgrRelation smgr, ForkNumber forknum, bool use_wal) { BulkWriteState *state; - state = palloc(sizeof(BulkWriteState)); + state = palloc_object(BulkWriteState); state->smgr = smgr; state->forknum = forknum; state->use_wal = use_wal; diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index e3f335a834..71bcdeb660 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -1599,7 +1599,7 @@ DropRelationFiles(RelFileLocator *delrels, int ndelrels, bool isRedo) SMgrRelation *srels; int i; - srels = palloc(sizeof(SMgrRelation) * ndelrels); + srels = palloc_array(SMgrRelation, ndelrels); for (i = 0; i < ndelrels; i++) { SMgrRelation srel = smgropen(delrels[i], INVALID_PROC_NUMBER); diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index bce37a36d5..f9066ab8c4 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -561,7 +561,7 @@ smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo) * create an array which contains all relations to be dropped, and close * each relation's forks at the smgr level while at it */ - rlocators = palloc(sizeof(RelFileLocatorBackend) * nrels); + rlocators = palloc_array(RelFileLocatorBackend, nrels); for (i = 0; i < nrels; i++) { RelFileLocatorBackend rlocator = rels[i]->smgr_rlocator; diff --git a/src/backend/storage/sync/sync.c b/src/backend/storage/sync/sync.c index fc16db9013..9d4c5eae5f 100644 --- a/src/backend/storage/sync/sync.c +++ b/src/backend/storage/sync/sync.c @@ -531,7 +531,7 @@ RememberSyncRequest(const FileTag *ftag, SyncRequestType type) MemoryContext oldcxt = MemoryContextSwitchTo(pendingOpsCxt); PendingUnlinkEntry *entry; - entry = palloc(sizeof(PendingUnlinkEntry)); + entry = palloc_object(PendingUnlinkEntry); entry->tag = *ftag; entry->cycle_ctr = checkpoint_cycle_ctr; entry->canceled = false; diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index fde78c5516..6dd64726f0 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -74,7 +74,7 @@ CreateQueryDesc(PlannedStmt *plannedstmt, QueryEnvironment *queryEnv, int instrument_options) { - QueryDesc *qd = (QueryDesc *) palloc(sizeof(QueryDesc)); + QueryDesc *qd = palloc_object(QueryDesc); qd->operation = plannedstmt->commandType; /* operation */ qd->plannedstmt = plannedstmt; /* plan */ diff --git a/src/backend/tsearch/dict.c b/src/backend/tsearch/dict.c index eb96885868..6b81050aa3 100644 --- a/src/backend/tsearch/dict.c +++ b/src/backend/tsearch/dict.c @@ -61,7 +61,7 @@ ts_lexize(PG_FUNCTION_ARGS) ptr = res; while (ptr->lexeme) ptr++; - da = (Datum *) palloc(sizeof(Datum) * (ptr - res)); + da = (Datum *) palloc_array(Datum, ptr - res); ptr = res; while (ptr->lexeme) { diff --git a/src/backend/tsearch/dict_ispell.c b/src/backend/tsearch/dict_ispell.c index debfbf956c..14e5da486e 100644 --- a/src/backend/tsearch/dict_ispell.c +++ b/src/backend/tsearch/dict_ispell.c @@ -37,7 +37,7 @@ dispell_init(PG_FUNCTION_ARGS) stoploaded = false; ListCell *l; - d = (DictISpell *) palloc0(sizeof(DictISpell)); + d = palloc0_object(DictISpell); NIStartBuild(&(d->obj)); diff --git a/src/backend/tsearch/dict_simple.c b/src/backend/tsearch/dict_simple.c index 2c972fc053..f6639ac7c9 100644 --- a/src/backend/tsearch/dict_simple.c +++ b/src/backend/tsearch/dict_simple.c @@ -31,7 +31,7 @@ Datum dsimple_init(PG_FUNCTION_ARGS) { List *dictoptions = (List *) PG_GETARG_POINTER(0); - DictSimple *d = (DictSimple *) palloc0(sizeof(DictSimple)); + DictSimple *d = palloc0_object(DictSimple); bool stoploaded = false, acceptloaded = false; ListCell *l; @@ -87,13 +87,13 @@ dsimple_lexize(PG_FUNCTION_ARGS) { /* reject as stopword */ pfree(txt); - res = palloc0(sizeof(TSLexeme) * 2); + res = palloc0_array(TSLexeme, 2); PG_RETURN_POINTER(res); } else if (d->accept) { /* accept */ - res = palloc0(sizeof(TSLexeme) * 2); + res = palloc0_array(TSLexeme, 2); res[0].lexeme = txt; PG_RETURN_POINTER(res); } diff --git a/src/backend/tsearch/dict_synonym.c b/src/backend/tsearch/dict_synonym.c index c2773eb01a..e076660b5e 100644 --- a/src/backend/tsearch/dict_synonym.c +++ b/src/backend/tsearch/dict_synonym.c @@ -134,7 +134,7 @@ dsynonym_init(PG_FUNCTION_ARGS) errmsg("could not open synonym file \"%s\": %m", filename))); - d = (DictSyn *) palloc0(sizeof(DictSyn)); + d = palloc0_object(DictSyn); while ((line = tsearch_readline(&trst)) != NULL) { @@ -169,12 +169,12 @@ dsynonym_init(PG_FUNCTION_ARGS) if (d->len == 0) { d->len = 64; - d->syn = (Syn *) palloc(sizeof(Syn) * d->len); + d->syn = palloc_array(Syn, d->len); } else { d->len *= 2; - d->syn = (Syn *) repalloc(d->syn, sizeof(Syn) * d->len); + d->syn = repalloc_array(d->syn, Syn, d->len); } } @@ -236,7 +236,7 @@ dsynonym_lexize(PG_FUNCTION_ARGS) if (!found) PG_RETURN_POINTER(NULL); - res = palloc0(sizeof(TSLexeme) * 2); + res = palloc0_array(TSLexeme, 2); res[0].lexeme = pnstrdup(found->out, found->outlen); res[0].flags = found->flags; diff --git a/src/backend/tsearch/dict_thesaurus.c b/src/backend/tsearch/dict_thesaurus.c index 1e6bbde1ca..6a3d336985 100644 --- a/src/backend/tsearch/dict_thesaurus.c +++ b/src/backend/tsearch/dict_thesaurus.c @@ -78,12 +78,12 @@ newLexeme(DictThesaurus *d, char *b, char *e, uint32 idsubst, uint16 posinsubst) if (d->ntwrds == 0) { d->ntwrds = 16; - d->wrds = (TheLexeme *) palloc(sizeof(TheLexeme) * d->ntwrds); + d->wrds = palloc_array(TheLexeme, d->ntwrds); } else { d->ntwrds *= 2; - d->wrds = (TheLexeme *) repalloc(d->wrds, sizeof(TheLexeme) * d->ntwrds); + d->wrds = repalloc_array(d->wrds, TheLexeme, d->ntwrds); } } @@ -95,7 +95,7 @@ newLexeme(DictThesaurus *d, char *b, char *e, uint32 idsubst, uint16 posinsubst) memcpy(ptr->lexeme, b, e - b); ptr->lexeme[e - b] = '\0'; - ptr->entries = (LexemeInfo *) palloc(sizeof(LexemeInfo)); + ptr->entries = palloc_object(LexemeInfo); ptr->entries->nextentry = NULL; ptr->entries->idsubst = idsubst; @@ -118,12 +118,12 @@ addWrd(DictThesaurus *d, char *b, char *e, uint32 idsubst, uint16 nwrd, uint16 p if (d->nsubst == 0) { d->nsubst = 16; - d->subst = (TheSubstitute *) palloc(sizeof(TheSubstitute) * d->nsubst); + d->subst = palloc_array(TheSubstitute, d->nsubst); } else { d->nsubst *= 2; - d->subst = (TheSubstitute *) repalloc(d->subst, sizeof(TheSubstitute) * d->nsubst); + d->subst = repalloc_array(d->subst, TheSubstitute, d->nsubst); } } } @@ -137,12 +137,12 @@ addWrd(DictThesaurus *d, char *b, char *e, uint32 idsubst, uint16 nwrd, uint16 p if (ntres == 0) { ntres = 2; - ptr->res = (TSLexeme *) palloc(sizeof(TSLexeme) * ntres); + ptr->res = palloc_array(TSLexeme, ntres); } else { ntres *= 2; - ptr->res = (TSLexeme *) repalloc(ptr->res, sizeof(TSLexeme) * ntres); + ptr->res = repalloc_array(ptr->res, TSLexeme, ntres); } } @@ -309,7 +309,7 @@ addCompiledLexeme(TheLexeme *newwrds, int *nnw, int *tnm, TSLexeme *lexeme, Lexe newwrds = (TheLexeme *) repalloc(newwrds, sizeof(TheLexeme) * *tnm); } - newwrds[*nnw].entries = (LexemeInfo *) palloc(sizeof(LexemeInfo)); + newwrds[*nnw].entries = palloc_object(LexemeInfo); if (lexeme && lexeme->lexeme) { @@ -394,7 +394,7 @@ compileTheLexeme(DictThesaurus *d) int i, nnw = 0, tnm = 16; - TheLexeme *newwrds = (TheLexeme *) palloc(sizeof(TheLexeme) * tnm), + TheLexeme *newwrds = palloc_array(TheLexeme, tnm), *ptrwrds; for (i = 0; i < d->nwrds; i++) @@ -511,7 +511,7 @@ compileTheSubstitute(DictThesaurus *d) *inptr; int n = 2; - outptr = d->subst[i].res = (TSLexeme *) palloc(sizeof(TSLexeme) * n); + outptr = d->subst[i].res = palloc_array(TSLexeme, n); outptr->lexeme = NULL; inptr = rem; @@ -603,7 +603,7 @@ thesaurus_init(PG_FUNCTION_ARGS) List *namelist; ListCell *l; - d = (DictThesaurus *) palloc0(sizeof(DictThesaurus)); + d = palloc0_object(DictThesaurus); foreach(l, dictoptions) { @@ -756,7 +756,7 @@ copyTSLexeme(TheSubstitute *ts) TSLexeme *res; uint16 i; - res = (TSLexeme *) palloc(sizeof(TSLexeme) * (ts->reslen + 1)); + res = palloc_array(TSLexeme, ts->reslen + 1); for (i = 0; i < ts->reslen; i++) { res[i] = ts->res[i]; @@ -834,7 +834,7 @@ thesaurus_lexize(PG_FUNCTION_ARGS) ptr++; } - infos = (LexemeInfo **) palloc(sizeof(LexemeInfo *) * nlex); + infos = palloc_array(LexemeInfo *, nlex); for (i = 0; i < nlex; i++) if ((infos[i] = findTheLexeme(d, basevar[i].lexeme)) == NULL) break; diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c index 0dab31f0dd..e5badb6b43 100644 --- a/src/backend/tsearch/spell.c +++ b/src/backend/tsearch/spell.c @@ -691,7 +691,7 @@ NIAddAffix(IspellDict *Conf, const char *flag, char flagflags, const char *mask, else { Conf->maffixes = 16; - Conf->Affix = (AFFIX *) palloc(Conf->maffixes * sizeof(AFFIX)); + Conf->Affix = palloc_array(AFFIX, Conf->maffixes); } } @@ -737,7 +737,7 @@ NIAddAffix(IspellDict *Conf, const char *flag, char flagflags, const char *mask, * allocated in the dictionary's memory context, and will be freed * automatically when it is destroyed. */ - Affix->reg.pregex = palloc(sizeof(regex_t)); + Affix->reg.pregex = palloc_object(regex_t); err = pg_regcomp(Affix->reg.pregex, wmask, wmasklen, REG_ADVANCED | REG_NOSUB, DEFAULT_COLLATION_OID); @@ -1327,7 +1327,7 @@ NIImportOOAffixes(IspellDict *Conf, const char *filename) /* Also reserve place for empty flag set */ naffix++; - Conf->AffixData = (const char **) palloc0(naffix * sizeof(char *)); + Conf->AffixData = palloc0_array(const char *, naffix); Conf->lenAffixData = Conf->nAffixData = naffix; /* Add empty flag set into AffixData */ @@ -1794,7 +1794,7 @@ NISortDictionary(IspellDict *Conf) * dictionary. Replace textual flag-field of Conf->Spell entries with * indexes into Conf->AffixData array. */ - Conf->AffixData = (const char **) palloc0(naffix * sizeof(const char *)); + Conf->AffixData = palloc0_array(const char *, naffix); curaffix = -1; for (i = 0; i < Conf->nspell; i++) @@ -1991,7 +1991,7 @@ NISortAffixes(IspellDict *Conf) /* Store compound affixes in the Conf->CompoundAffix array */ if (Conf->naffixes > 1) qsort(Conf->Affix, Conf->naffixes, sizeof(AFFIX), cmpaffix); - Conf->CompoundAffix = ptr = (CMPDAffix *) palloc(sizeof(CMPDAffix) * Conf->naffixes); + Conf->CompoundAffix = ptr = palloc_array(CMPDAffix, Conf->naffixes); ptr->affix = NULL; for (i = 0; i < Conf->naffixes; i++) @@ -2147,7 +2147,7 @@ CheckAffix(const char *word, size_t len, AFFIX *Affix, int flagflags, char *neww /* Convert data string to wide characters */ newword_len = strlen(newword); - data = (pg_wchar *) palloc((newword_len + 1) * sizeof(pg_wchar)); + data = palloc_array(pg_wchar, newword_len + 1); data_len = pg_mb2wchar_with_len(newword, data, newword_len); if (pg_regexec(Affix->reg.pregex, data, data_len, @@ -2197,7 +2197,7 @@ NormalizeSubWord(IspellDict *Conf, const char *word, int flag) if (wrdlen > MAXNORMLEN) return NULL; - cur = forms = (char **) palloc(MAX_NORM * sizeof(char *)); + cur = forms = palloc_array(char *, MAX_NORM); *cur = NULL; @@ -2340,7 +2340,7 @@ CheckCompoundAffixes(CMPDAffix **ptr, const char *word, int len, bool CheckInPla static SplitVar * CopyVar(SplitVar *s, int makedup) { - SplitVar *v = (SplitVar *) palloc(sizeof(SplitVar)); + SplitVar *v = palloc_object(SplitVar); v->next = NULL; if (s) @@ -2348,7 +2348,7 @@ CopyVar(SplitVar *s, int makedup) int i; v->lenstem = s->lenstem; - v->stem = (char **) palloc(sizeof(char *) * v->lenstem); + v->stem = palloc_array(char *, v->lenstem); v->nstem = s->nstem; for (i = 0; i < s->nstem; i++) v->stem[i] = (makedup) ? pstrdup(s->stem[i]) : s->stem[i]; @@ -2356,7 +2356,7 @@ CopyVar(SplitVar *s, int makedup) else { v->lenstem = 16; - v->stem = (char **) palloc(sizeof(char *) * v->lenstem); + v->stem = palloc_array(char *, v->lenstem); v->nstem = 0; } return v; @@ -2529,7 +2529,7 @@ static void addNorm(TSLexeme **lres, TSLexeme **lcur, char *word, int flags, uint16 NVariant) { if (*lres == NULL) - *lcur = *lres = (TSLexeme *) palloc(MAX_NORM * sizeof(TSLexeme)); + *lcur = *lres = palloc_array(TSLexeme, MAX_NORM); if (*lcur - *lres < MAX_NORM - 1) { diff --git a/src/backend/tsearch/to_tsany.c b/src/backend/tsearch/to_tsany.c index 4dfcc2cd3b..b6efe10842 100644 --- a/src/backend/tsearch/to_tsany.c +++ b/src/backend/tsearch/to_tsany.c @@ -84,7 +84,7 @@ uniqueWORD(ParsedWord *a, int32 l) { tmppos = LIMITPOS(a->pos.pos); a->alen = 2; - a->pos.apos = (uint16 *) palloc(sizeof(uint16) * a->alen); + a->pos.apos = palloc_array(uint16, a->alen); a->pos.apos[0] = 1; a->pos.apos[1] = tmppos; return l; @@ -103,7 +103,7 @@ uniqueWORD(ParsedWord *a, int32 l) */ tmppos = LIMITPOS(a->pos.pos); a->alen = 2; - a->pos.apos = (uint16 *) palloc(sizeof(uint16) * a->alen); + a->pos.apos = palloc_array(uint16, a->alen); a->pos.apos[0] = 1; a->pos.apos[1] = tmppos; @@ -123,7 +123,7 @@ uniqueWORD(ParsedWord *a, int32 l) res->word = ptr->word; tmppos = LIMITPOS(ptr->pos.pos); res->alen = 2; - res->pos.apos = (uint16 *) palloc(sizeof(uint16) * res->alen); + res->pos.apos = palloc_array(uint16, res->alen); res->pos.apos[0] = 1; res->pos.apos[1] = tmppos; } @@ -141,7 +141,7 @@ uniqueWORD(ParsedWord *a, int32 l) if (res->pos.apos[0] + 1 >= res->alen) { res->alen *= 2; - res->pos.apos = (uint16 *) repalloc(res->pos.apos, sizeof(uint16) * res->alen); + res->pos.apos = repalloc_array(res->pos.apos, uint16, res->alen); } if (res->pos.apos[0] == 0 || res->pos.apos[res->pos.apos[0]] != LIMITPOS(ptr->pos.pos)) { @@ -255,7 +255,7 @@ to_tsvector_byid(PG_FUNCTION_ARGS) prs.lenwords = MaxAllocSize / sizeof(ParsedWord); prs.curwords = 0; prs.pos = 0; - prs.words = (ParsedWord *) palloc(sizeof(ParsedWord) * prs.lenwords); + prs.words = palloc_array(ParsedWord, prs.lenwords); parsetext(cfgId, &prs, VARDATA_ANY(in), VARSIZE_ANY_EXHDR(in)); @@ -453,7 +453,7 @@ add_to_tsvector(void *_state, char *elem_value, int elem_len) * (parsetext() will realloc it bigger as needed.) */ prs->lenwords = 16; - prs->words = (ParsedWord *) palloc(sizeof(ParsedWord) * prs->lenwords); + prs->words = palloc_array(ParsedWord, prs->lenwords); prs->curwords = 0; prs->pos = 0; } @@ -503,7 +503,7 @@ pushval_morph(Datum opaque, TSQueryParserState state, char *strval, int lenval, prs.lenwords = 4; prs.curwords = 0; prs.pos = 0; - prs.words = (ParsedWord *) palloc(sizeof(ParsedWord) * prs.lenwords); + prs.words = palloc_array(ParsedWord, prs.lenwords); parsetext(data->cfg_id, &prs, strval, lenval); diff --git a/src/backend/tsearch/ts_parse.c b/src/backend/tsearch/ts_parse.c index cba421892b..6eebff6c46 100644 --- a/src/backend/tsearch/ts_parse.c +++ b/src/backend/tsearch/ts_parse.c @@ -99,7 +99,7 @@ LPLRemoveHead(ListParsedLex *list) static void LexizeAddLemm(LexizeData *ld, int type, char *lemm, int lenlemm) { - ParsedLex *newpl = (ParsedLex *) palloc(sizeof(ParsedLex)); + ParsedLex *newpl = palloc_object(ParsedLex); newpl->type = type; newpl->lemm = lemm; diff --git a/src/backend/tsearch/ts_selfuncs.c b/src/backend/tsearch/ts_selfuncs.c index fb367ad74d..63a6ecd3e2 100644 --- a/src/backend/tsearch/ts_selfuncs.c +++ b/src/backend/tsearch/ts_selfuncs.c @@ -226,7 +226,7 @@ mcelem_tsquery_selec(TSQuery query, const Datum *mcelem, int nmcelem, /* * Transpose the data into a single array so we can use bsearch(). */ - lookup = (TextFreq *) palloc(sizeof(TextFreq) * nmcelem); + lookup = palloc_array(TextFreq, nmcelem); for (i = 0; i < nmcelem; i++) { /* diff --git a/src/backend/tsearch/ts_typanalyze.c b/src/backend/tsearch/ts_typanalyze.c index 93aab00a3c..9b8b0995ab 100644 --- a/src/backend/tsearch/ts_typanalyze.c +++ b/src/backend/tsearch/ts_typanalyze.c @@ -320,7 +320,7 @@ compute_tsvector_stats(VacAttrStats *stats, cutoff_freq = 9 * lexeme_no / bucket_width; i = hash_get_num_entries(lexemes_tab); /* surely enough space */ - sort_table = (TrackItem **) palloc(sizeof(TrackItem *) * i); + sort_table = palloc_array(TrackItem *, i); hash_seq_init(&scan_status, lexemes_tab); track_len = 0; @@ -412,8 +412,8 @@ compute_tsvector_stats(VacAttrStats *stats, * create that for a tsvector column, since null elements aren't * possible.) */ - mcelem_values = (Datum *) palloc(num_mcelem * sizeof(Datum)); - mcelem_freqs = (float4 *) palloc((num_mcelem + 2) * sizeof(float4)); + mcelem_values = palloc_array(Datum, num_mcelem); + mcelem_freqs = palloc_array(float4, num_mcelem + 2); /* * See comments above about use of nonnull_cnt as the divisor for diff --git a/src/backend/tsearch/ts_utils.c b/src/backend/tsearch/ts_utils.c index 0b4a578664..647e464964 100644 --- a/src/backend/tsearch/ts_utils.c +++ b/src/backend/tsearch/ts_utils.c @@ -105,12 +105,12 @@ readstoplist(const char *fname, StopList *s, char *(*wordop) (const char *, size if (reallen == 0) { reallen = 64; - stop = (char **) palloc(sizeof(char *) * reallen); + stop = palloc_array(char *, reallen); } else { reallen *= 2; - stop = (char **) repalloc(stop, sizeof(char *) * reallen); + stop = repalloc_array(stop, char *, reallen); } } diff --git a/src/backend/tsearch/wparser.c b/src/backend/tsearch/wparser.c index 55171aa8da..9e53f57324 100644 --- a/src/backend/tsearch/wparser.c +++ b/src/backend/tsearch/wparser.c @@ -58,7 +58,7 @@ tt_setup_firstcall(FuncCallContext *funcctx, FunctionCallInfo fcinfo, oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); - st = (TSTokenTypeStorage *) palloc(sizeof(TSTokenTypeStorage)); + st = palloc_object(TSTokenTypeStorage); st->cur = 0; /* lextype takes one dummy argument */ st->list = (LexDescr *) DatumGetPointer(OidFunctionCall1(prs->lextypeOid, @@ -173,10 +173,10 @@ prs_setup_firstcall(FuncCallContext *funcctx, FunctionCallInfo fcinfo, oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); - st = (PrsStorage *) palloc(sizeof(PrsStorage)); + st = palloc_object(PrsStorage); st->cur = 0; st->len = 16; - st->list = (LexemeEntry *) palloc(sizeof(LexemeEntry) * st->len); + st->list = palloc_array(LexemeEntry, st->len); prsdata = DatumGetPointer(FunctionCall2(&prs->prsstart, PointerGetDatum(VARDATA_ANY(txt)), @@ -307,7 +307,7 @@ ts_headline_byid_opt(PG_FUNCTION_ARGS) memset(&prs, 0, sizeof(HeadlineParsedText)); prs.lenwords = 32; - prs.words = (HeadlineWordEntry *) palloc(sizeof(HeadlineWordEntry) * prs.lenwords); + prs.words = palloc_array(HeadlineWordEntry, prs.lenwords); hlparsetext(cfg->cfgId, &prs, query, VARDATA_ANY(in), VARSIZE_ANY_EXHDR(in)); @@ -373,11 +373,11 @@ ts_headline_jsonb_byid_opt(PG_FUNCTION_ARGS) Jsonb *out; JsonTransformStringValuesAction action = (JsonTransformStringValuesAction) headline_json_value; HeadlineParsedText prs; - HeadlineJsonState *state = palloc0(sizeof(HeadlineJsonState)); + HeadlineJsonState *state = palloc0_object(HeadlineJsonState); memset(&prs, 0, sizeof(HeadlineParsedText)); prs.lenwords = 32; - prs.words = (HeadlineWordEntry *) palloc(sizeof(HeadlineWordEntry) * prs.lenwords); + prs.words = palloc_array(HeadlineWordEntry, prs.lenwords); state->prs = &prs; state->cfg = lookup_ts_config_cache(tsconfig); @@ -450,11 +450,11 @@ ts_headline_json_byid_opt(PG_FUNCTION_ARGS) JsonTransformStringValuesAction action = (JsonTransformStringValuesAction) headline_json_value; HeadlineParsedText prs; - HeadlineJsonState *state = palloc0(sizeof(HeadlineJsonState)); + HeadlineJsonState *state = palloc0_object(HeadlineJsonState); memset(&prs, 0, sizeof(HeadlineParsedText)); prs.lenwords = 32; - prs.words = (HeadlineWordEntry *) palloc(sizeof(HeadlineWordEntry) * prs.lenwords); + prs.words = palloc_array(HeadlineWordEntry, prs.lenwords); state->prs = &prs; state->cfg = lookup_ts_config_cache(tsconfig); diff --git a/src/backend/tsearch/wparser_def.c b/src/backend/tsearch/wparser_def.c index 251a2ae656..9fbeab4754 100644 --- a/src/backend/tsearch/wparser_def.c +++ b/src/backend/tsearch/wparser_def.c @@ -269,7 +269,7 @@ static bool TParserGet(TParser *prs); static TParserPosition * newTParserPosition(TParserPosition *prev) { - TParserPosition *res = (TParserPosition *) palloc(sizeof(TParserPosition)); + TParserPosition *res = palloc_object(TParserPosition); if (prev) memcpy(res, prev, sizeof(TParserPosition)); @@ -286,12 +286,12 @@ newTParserPosition(TParserPosition *prev) static TParser * TParserInit(char *str, int len) { - TParser *prs = (TParser *) palloc0(sizeof(TParser)); + TParser *prs = palloc0_object(TParser); prs->charmaxlen = pg_database_encoding_max_length(); prs->str = str; prs->lenstr = len; - prs->pgwstr = (pg_wchar *) palloc(sizeof(pg_wchar) * (prs->lenstr + 1)); + prs->pgwstr = palloc_array(pg_wchar, prs->lenstr + 1); pg_mb2wchar_with_len(prs->str, prs->pgwstr, prs->lenstr); prs->state = newTParserPosition(NULL); @@ -318,7 +318,7 @@ TParserInit(char *str, int len) static TParser * TParserCopyInit(const TParser *orig) { - TParser *prs = (TParser *) palloc0(sizeof(TParser)); + TParser *prs = palloc0_object(TParser); prs->charmaxlen = orig->charmaxlen; prs->str = orig->str + orig->state->posbyte; @@ -1832,7 +1832,7 @@ TParserGet(TParser *prs) Datum prsd_lextype(PG_FUNCTION_ARGS) { - LexDescr *descr = (LexDescr *) palloc(sizeof(LexDescr) * (LASTNUM + 1)); + LexDescr *descr = palloc_array(LexDescr, LASTNUM + 1); int i; for (i = 1; i <= LASTNUM; i++) @@ -1949,7 +1949,7 @@ checkcondition_HL(void *opaque, QueryOperand *val, ExecPhraseData *data) if (!data->pos) { - data->pos = palloc(sizeof(WordEntryPos) * checkval->len); + data->pos = palloc_array(WordEntryPos, checkval->len); data->allocated = true; data->npos = 1; data->pos[0] = checkval->words[i].pos; diff --git a/src/backend/utils/activity/pgstat_relation.c b/src/backend/utils/activity/pgstat_relation.c index 1de477cbee..b90754f857 100644 --- a/src/backend/utils/activity/pgstat_relation.c +++ b/src/backend/utils/activity/pgstat_relation.c @@ -514,7 +514,7 @@ find_tabstat_entry(Oid rel_id) } tabentry = (PgStat_TableStatus *) entry_ref->pending; - tablestatus = palloc(sizeof(PgStat_TableStatus)); + tablestatus = palloc_object(PgStat_TableStatus); *tablestatus = *tabentry; /* diff --git a/src/backend/utils/activity/wait_event.c b/src/backend/utils/activity/wait_event.c index 96d61f77f6..a8c287c289 100644 --- a/src/backend/utils/activity/wait_event.c +++ b/src/backend/utils/activity/wait_event.c @@ -317,7 +317,7 @@ GetWaitEventCustomNames(uint32 classId, int *nwaitevents) els = hash_get_num_entries(WaitEventCustomHashByName); /* Allocate enough space for all entries */ - waiteventnames = palloc(els * sizeof(char *)); + waiteventnames = palloc_array(char *, els); /* Now scan the hash table to copy the data */ hash_seq_init(&hash_seq, WaitEventCustomHashByName); diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index fbcd64a260..05d48412f8 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -618,7 +618,7 @@ aclitemin(PG_FUNCTION_ARGS) Node *escontext = fcinfo->context; AclItem *aip; - aip = (AclItem *) palloc(sizeof(AclItem)); + aip = palloc_object(AclItem); s = aclparse(s, aip, escontext); if (s == NULL) @@ -1661,7 +1661,7 @@ makeaclitem(PG_FUNCTION_ARGS) priv = convert_any_priv_string(privtext, any_priv_map); - result = (AclItem *) palloc(sizeof(AclItem)); + result = palloc_object(AclItem); result->ai_grantee = grantee; result->ai_grantor = grantor; @@ -1821,7 +1821,7 @@ aclexplode(PG_FUNCTION_ARGS) funcctx->tuple_desc = BlessTupleDesc(tupdesc); /* allocate memory for user context */ - idx = (int *) palloc(sizeof(int[2])); + idx = palloc_array(int, 2); idx[0] = 0; /* ACL array item index */ idx[1] = -1; /* privilege type counter */ funcctx->user_fctx = idx; diff --git a/src/backend/utils/adt/array_selfuncs.c b/src/backend/utils/adt/array_selfuncs.c index 4dab35b005..cd201461c1 100644 --- a/src/backend/utils/adt/array_selfuncs.c +++ b/src/backend/utils/adt/array_selfuncs.c @@ -759,7 +759,7 @@ mcelem_array_contained_selec(const Datum *mcelem, int nmcelem, * elem_selec is array of estimated frequencies for elements in the * constant. */ - elem_selec = (float *) palloc(sizeof(float) * nitems); + elem_selec = palloc_array(float, nitems); /* Scan mcelem and array in parallel. */ mcelem_index = 0; @@ -936,7 +936,7 @@ calc_hist(const float4 *hist, int nhist, int n) next_interval; float frac; - hist_part = (float *) palloc((n + 1) * sizeof(float)); + hist_part = palloc_array(float, n + 1); /* * frac is a probability contribution for each interval between histogram @@ -1028,8 +1028,8 @@ calc_distr(const float *p, int n, int m, float rest) * Since we return only the last row of the matrix and need only the * current and previous row for calculations, allocate two rows. */ - row = (float *) palloc((m + 1) * sizeof(float)); - prev_row = (float *) palloc((m + 1) * sizeof(float)); + row = palloc_array(float, m + 1); + prev_row = palloc_array(float, m + 1); /* M[0,0] = 1 */ row[0] = 1.0f; diff --git a/src/backend/utils/adt/array_typanalyze.c b/src/backend/utils/adt/array_typanalyze.c index 560b27f3ca..61aedd31ff 100644 --- a/src/backend/utils/adt/array_typanalyze.c +++ b/src/backend/utils/adt/array_typanalyze.c @@ -132,7 +132,7 @@ array_typanalyze(PG_FUNCTION_ARGS) PG_RETURN_BOOL(true); /* Store our findings for use by compute_array_stats() */ - extra_data = (ArrayAnalyzeExtraData *) palloc(sizeof(ArrayAnalyzeExtraData)); + extra_data = palloc_object(ArrayAnalyzeExtraData); extra_data->type_id = typentry->type_id; extra_data->eq_opr = typentry->eq_opr; extra_data->coll_id = stats->attrcollid; /* collation we should use */ @@ -469,7 +469,7 @@ compute_array_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc, cutoff_freq = 9 * element_no / bucket_width; i = hash_get_num_entries(elements_tab); /* surely enough space */ - sort_table = (TrackItem **) palloc(sizeof(TrackItem *) * i); + sort_table = palloc_array(TrackItem *, i); hash_seq_init(&scan_status, elements_tab); track_len = 0; @@ -606,8 +606,7 @@ compute_array_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc, * Create an array of DECountItem pointers, and sort them into * increasing count order. */ - sorted_count_items = (DECountItem **) - palloc(sizeof(DECountItem *) * count_items_count); + sorted_count_items = palloc_array(DECountItem *, count_items_count); hash_seq_init(&scan_status, count_tab); j = 0; while ((count_item = (DECountItem *) hash_seq_search(&scan_status)) != NULL) diff --git a/src/backend/utils/adt/array_userfuncs.c b/src/backend/utils/adt/array_userfuncs.c index 8eb342e338..c01bf46612 100644 --- a/src/backend/utils/adt/array_userfuncs.c +++ b/src/backend/utils/adt/array_userfuncs.c @@ -433,8 +433,8 @@ array_cat(PG_FUNCTION_ARGS) * themselves) of the input argument arrays */ ndims = ndims1; - dims = (int *) palloc(ndims * sizeof(int)); - lbs = (int *) palloc(ndims * sizeof(int)); + dims = palloc_array(int, ndims); + lbs = palloc_array(int, ndims); dims[0] = dims1[0] + dims2[0]; lbs[0] = lbs1[0]; @@ -459,8 +459,8 @@ array_cat(PG_FUNCTION_ARGS) * the first argument inserted at the front of the outer dimension */ ndims = ndims2; - dims = (int *) palloc(ndims * sizeof(int)); - lbs = (int *) palloc(ndims * sizeof(int)); + dims = palloc_array(int, ndims); + lbs = palloc_array(int, ndims); memcpy(dims, dims2, ndims * sizeof(int)); memcpy(lbs, lbs2, ndims * sizeof(int)); @@ -487,8 +487,8 @@ array_cat(PG_FUNCTION_ARGS) * second argument appended to the end of the outer dimension */ ndims = ndims1; - dims = (int *) palloc(ndims * sizeof(int)); - lbs = (int *) palloc(ndims * sizeof(int)); + dims = palloc_array(int, ndims); + lbs = palloc_array(int, ndims); memcpy(dims, dims1, ndims * sizeof(int)); memcpy(lbs, lbs1, ndims * sizeof(int)); diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 24e5b2adea..b67ce57656 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -3582,7 +3582,7 @@ construct_empty_array(Oid elmtype) { ArrayType *result; - result = (ArrayType *) palloc0(sizeof(ArrayType)); + result = palloc0_object(ArrayType); SET_VARSIZE(result, sizeof(ArrayType)); result->ndim = 0; result->dataoffset = 0; @@ -3645,9 +3645,9 @@ deconstruct_array(const ArrayType *array, Assert(ARR_ELEMTYPE(array) == elmtype); nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array)); - *elemsp = elems = (Datum *) palloc(nelems * sizeof(Datum)); + *elemsp = elems = palloc_array(Datum, nelems); if (nullsp) - *nullsp = nulls = (bool *) palloc0(nelems * sizeof(bool)); + *nullsp = nulls = palloc0_array(bool, nelems); else nulls = NULL; *nelemsp = nelems; @@ -4209,7 +4209,7 @@ hash_array(PG_FUNCTION_ARGS) * modify typentry, since that points directly into the type * cache. */ - record_typentry = palloc0(sizeof(*record_typentry)); + record_typentry = palloc0_object(TypeCacheEntry); record_typentry->type_id = element_type; /* fill in what we need below */ @@ -4597,7 +4597,7 @@ arraycontained(PG_FUNCTION_ARGS) ArrayIterator array_create_iterator(ArrayType *arr, int slice_ndim, ArrayMetaState *mstate) { - ArrayIterator iterator = palloc0(sizeof(ArrayIteratorData)); + ArrayIterator iterator = palloc0_object(ArrayIteratorData); /* * Sanity-check inputs --- caller should have got this right already @@ -5944,7 +5944,7 @@ generate_subscripts(PG_FUNCTION_ARGS) * switch to memory context appropriate for multiple function calls */ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); - fctx = (generate_subscripts_fctx *) palloc(sizeof(generate_subscripts_fctx)); + fctx = palloc_object(generate_subscripts_fctx); lb = AARR_LBOUND(v); dimv = AARR_DIMS(v); @@ -6291,7 +6291,7 @@ array_unnest(PG_FUNCTION_ARGS) arr = PG_GETARG_ANY_ARRAY_P(0); /* allocate memory for user context */ - fctx = (array_unnest_fctx *) palloc(sizeof(array_unnest_fctx)); + fctx = palloc_object(array_unnest_fctx); /* initialize state */ array_iter_setup(&fctx->iter, arr); diff --git a/src/backend/utils/adt/arraysubs.c b/src/backend/utils/adt/arraysubs.c index b476fa586a..f280212fd8 100644 --- a/src/backend/utils/adt/arraysubs.c +++ b/src/backend/utils/adt/arraysubs.c @@ -497,7 +497,7 @@ array_exec_setup(const SubscriptingRef *sbsref, /* * Allocate type-specific workspace. */ - workspace = (ArraySubWorkspace *) palloc(sizeof(ArraySubWorkspace)); + workspace = palloc_object(ArraySubWorkspace); sbsrefstate->workspace = workspace; /* diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index c4b8125dd6..421ccc306f 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -358,7 +358,7 @@ GetSQLCurrentTime(int32 typmod) GetCurrentTimeUsec(tm, &fsec, &tz); - result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); + result = palloc_object(TimeTzADT); tm2timetz(tm, fsec, tz, result); AdjustTimeForTypmod(&(result->time), typmod); return result; @@ -2087,7 +2087,7 @@ time_interval(PG_FUNCTION_ARGS) TimeADT time = PG_GETARG_TIMEADT(0); Interval *result; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); result->time = time; result->day = 0; @@ -2132,7 +2132,7 @@ time_mi_time(PG_FUNCTION_ARGS) TimeADT time2 = PG_GETARG_TIMEADT(1); Interval *result; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); result->month = 0; result->day = 0; @@ -2399,7 +2399,7 @@ timetz_in(PG_FUNCTION_ARGS) PG_RETURN_NULL(); } - result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); + result = palloc_object(TimeTzADT); tm2timetz(tm, fsec, tz, result); AdjustTimeForTypmod(&(result->time), typmod); @@ -2438,7 +2438,7 @@ timetz_recv(PG_FUNCTION_ARGS) int32 typmod = PG_GETARG_INT32(2); TimeTzADT *result; - result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); + result = palloc_object(TimeTzADT); result->time = pq_getmsgint64(buf); @@ -2524,7 +2524,7 @@ timetz_scale(PG_FUNCTION_ARGS) int32 typmod = PG_GETARG_INT32(1); TimeTzADT *result; - result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); + result = palloc_object(TimeTzADT); result->time = time->time; result->zone = time->zone; @@ -2700,7 +2700,7 @@ timetz_pl_interval(PG_FUNCTION_ARGS) (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("cannot add infinite interval to time"))); - result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); + result = palloc_object(TimeTzADT); result->time = time->time + span->time; result->time -= result->time / USECS_PER_DAY * USECS_PER_DAY; @@ -2727,7 +2727,7 @@ timetz_mi_interval(PG_FUNCTION_ARGS) (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("cannot subtract infinite interval from time"))); - result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); + result = palloc_object(TimeTzADT); result->time = time->time - span->time; result->time -= result->time / USECS_PER_DAY * USECS_PER_DAY; @@ -2934,7 +2934,7 @@ time_timetz(PG_FUNCTION_ARGS) time2tm(time, tm, &fsec); tz = DetermineTimeZoneOffset(tm, session_timezone); - result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); + result = palloc_object(TimeTzADT); result->time = time; result->zone = tz; @@ -2964,7 +2964,7 @@ timestamptz_timetz(PG_FUNCTION_ARGS) (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); - result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); + result = palloc_object(TimeTzADT); tm2timetz(tm, fsec, tz, result); @@ -3197,7 +3197,7 @@ timetz_zone(PG_FUNCTION_ARGS) errmsg("timestamp out of range"))); } - result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); + result = palloc_object(TimeTzADT); result->time = t->time + (t->zone - tz) * USECS_PER_SEC; /* C99 modulo has the wrong sign convention for negative input */ @@ -3238,7 +3238,7 @@ timetz_izone(PG_FUNCTION_ARGS) tz = -(zone->time / USECS_PER_SEC); - result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); + result = palloc_object(TimeTzADT); result->time = time->time + (time->zone - tz) * USECS_PER_SEC; /* C99 modulo has the wrong sign convention for negative input */ diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 680fee2a84..e3a099eaa6 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -5152,7 +5152,7 @@ pg_timezone_abbrevs_zone(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* allocate memory for user context */ - pindex = (int *) palloc(sizeof(int)); + pindex = palloc_object(int); *pindex = 0; funcctx->user_fctx = pindex; @@ -5187,7 +5187,7 @@ pg_timezone_abbrevs_zone(PG_FUNCTION_ARGS) /* Convert offset (in seconds) to an interval; can't overflow */ MemSet(&itm_in, 0, sizeof(struct pg_itm_in)); itm_in.tm_usec = (int64) gmtoff * USECS_PER_SEC; - resInterval = (Interval *) palloc(sizeof(Interval)); + resInterval = palloc_object(Interval); (void) itmin2interval(&itm_in, resInterval); values[1] = IntervalPGetDatum(resInterval); @@ -5239,7 +5239,7 @@ pg_timezone_abbrevs_abbrevs(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* allocate memory for user context */ - pindex = (int *) palloc(sizeof(int)); + pindex = palloc_object(int); *pindex = 0; funcctx->user_fctx = pindex; @@ -5310,7 +5310,7 @@ pg_timezone_abbrevs_abbrevs(PG_FUNCTION_ARGS) /* Convert offset (in seconds) to an interval; can't overflow */ MemSet(&itm_in, 0, sizeof(struct pg_itm_in)); itm_in.tm_usec = (int64) gmtoffset * USECS_PER_SEC; - resInterval = (Interval *) palloc(sizeof(Interval)); + resInterval = palloc_object(Interval); (void) itmin2interval(&itm_in, resInterval); values[1] = IntervalPGetDatum(resInterval); @@ -5378,7 +5378,7 @@ pg_timezone_names(PG_FUNCTION_ARGS) /* Convert tzoff to an interval; can't overflow */ MemSet(&itm_in, 0, sizeof(struct pg_itm_in)); itm_in.tm_usec = (int64) -tzoff * USECS_PER_SEC; - resInterval = (Interval *) palloc(sizeof(Interval)); + resInterval = palloc_object(Interval); (void) itmin2interval(&itm_in, resInterval); values[2] = IntervalPGetDatum(resInterval); diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index c3cb022a40..a4570471bb 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -4264,7 +4264,7 @@ parse_datetime(text *date_txt, text *fmt, Oid collid, bool strict, { if (flags & DCH_ZONED) { - TimeTzADT *result = palloc(sizeof(TimeTzADT)); + TimeTzADT *result = palloc_object(TimeTzADT); if (ftz.has_tz) { diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c index 9101a72074..43b7eb43a7 100644 --- a/src/backend/utils/adt/geo_ops.c +++ b/src/backend/utils/adt/geo_ops.c @@ -423,7 +423,7 @@ box_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); Node *escontext = fcinfo->context; - BOX *box = (BOX *) palloc(sizeof(BOX)); + BOX *box = palloc_object(BOX); bool isopen; float8 x, y; @@ -470,7 +470,7 @@ box_recv(PG_FUNCTION_ARGS) float8 x, y; - box = (BOX *) palloc(sizeof(BOX)); + box = palloc_object(BOX); box->high.x = pq_getmsgfloat8(buf); box->high.y = pq_getmsgfloat8(buf); @@ -849,7 +849,7 @@ Datum box_center(PG_FUNCTION_ARGS) { BOX *box = PG_GETARG_BOX_P(0); - Point *result = (Point *) palloc(sizeof(Point)); + Point *result = palloc_object(Point); box_cn(result, box); @@ -914,7 +914,7 @@ box_intersect(PG_FUNCTION_ARGS) if (!box_ov(box1, box2)) PG_RETURN_NULL(); - result = (BOX *) palloc(sizeof(BOX)); + result = palloc_object(BOX); result->high.x = float8_min(box1->high.x, box2->high.x); result->low.x = float8_max(box1->low.x, box2->low.x); @@ -933,7 +933,7 @@ Datum box_diagonal(PG_FUNCTION_ARGS) { BOX *box = PG_GETARG_BOX_P(0); - LSEG *result = (LSEG *) palloc(sizeof(LSEG)); + LSEG *result = palloc_object(LSEG); statlseg_construct(result, &box->high, &box->low); @@ -980,7 +980,7 @@ line_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); Node *escontext = fcinfo->context; - LINE *line = (LINE *) palloc(sizeof(LINE)); + LINE *line = palloc_object(LINE); LSEG lseg; bool isopen; char *s; @@ -1040,7 +1040,7 @@ line_recv(PG_FUNCTION_ARGS) StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); LINE *line; - line = (LINE *) palloc(sizeof(LINE)); + line = palloc_object(LINE); line->A = pq_getmsgfloat8(buf); line->B = pq_getmsgfloat8(buf); @@ -1116,7 +1116,7 @@ line_construct_pp(PG_FUNCTION_ARGS) { Point *pt1 = PG_GETARG_POINT_P(0); Point *pt2 = PG_GETARG_POINT_P(1); - LINE *result = (LINE *) palloc(sizeof(LINE)); + LINE *result = palloc_object(LINE); if (point_eq_point(pt1, pt2)) ereport(ERROR, @@ -1289,7 +1289,7 @@ line_interpt(PG_FUNCTION_ARGS) LINE *l2 = PG_GETARG_LINE_P(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); if (!line_interpt_line(result, l1, l2)) PG_RETURN_NULL(); @@ -1831,7 +1831,7 @@ Datum point_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); - Point *point = (Point *) palloc(sizeof(Point)); + Point *point = palloc_object(Point); /* Ignore failure from pair_decode, since our return value won't matter */ pair_decode(str, &point->x, &point->y, NULL, "point", str, fcinfo->context); @@ -1855,7 +1855,7 @@ point_recv(PG_FUNCTION_ARGS) StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); Point *point; - point = (Point *) palloc(sizeof(Point)); + point = palloc_object(Point); point->x = pq_getmsgfloat8(buf); point->y = pq_getmsgfloat8(buf); PG_RETURN_POINT_P(point); @@ -2066,7 +2066,7 @@ lseg_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); Node *escontext = fcinfo->context; - LSEG *lseg = (LSEG *) palloc(sizeof(LSEG)); + LSEG *lseg = palloc_object(LSEG); bool isopen; if (!path_decode(str, true, 2, &lseg->p[0], &isopen, NULL, "lseg", str, @@ -2094,7 +2094,7 @@ lseg_recv(PG_FUNCTION_ARGS) StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); LSEG *lseg; - lseg = (LSEG *) palloc(sizeof(LSEG)); + lseg = palloc_object(LSEG); lseg->p[0].x = pq_getmsgfloat8(buf); lseg->p[0].y = pq_getmsgfloat8(buf); @@ -2130,7 +2130,7 @@ lseg_construct(PG_FUNCTION_ARGS) { Point *pt1 = PG_GETARG_POINT_P(0); Point *pt2 = PG_GETARG_POINT_P(1); - LSEG *result = (LSEG *) palloc(sizeof(LSEG)); + LSEG *result = palloc_object(LSEG); statlseg_construct(result, pt1, pt2); @@ -2318,7 +2318,7 @@ lseg_center(PG_FUNCTION_ARGS) LSEG *lseg = PG_GETARG_LSEG_P(0); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); result->x = float8_div(float8_pl(lseg->p[0].x, lseg->p[1].x), 2.0); result->y = float8_div(float8_pl(lseg->p[0].y, lseg->p[1].y), 2.0); @@ -2364,7 +2364,7 @@ lseg_interpt(PG_FUNCTION_ARGS) LSEG *l2 = PG_GETARG_LSEG_P(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); if (!lseg_interpt_lseg(result, l1, l2)) PG_RETURN_NULL(); @@ -2753,7 +2753,7 @@ close_pl(PG_FUNCTION_ARGS) LINE *line = PG_GETARG_LINE_P(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); if (isnan(line_closept_point(result, line, pt))) PG_RETURN_NULL(); @@ -2794,7 +2794,7 @@ close_ps(PG_FUNCTION_ARGS) LSEG *lseg = PG_GETARG_LSEG_P(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); if (isnan(lseg_closept_point(result, lseg, pt))) PG_RETURN_NULL(); @@ -2859,7 +2859,7 @@ close_lseg(PG_FUNCTION_ARGS) if (lseg_sl(l1) == lseg_sl(l2)) PG_RETURN_NULL(); - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); if (isnan(lseg_closept_lseg(result, l2, l1))) PG_RETURN_NULL(); @@ -2936,7 +2936,7 @@ close_pb(PG_FUNCTION_ARGS) BOX *box = PG_GETARG_BOX_P(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); if (isnan(box_closept_point(result, box, pt))) PG_RETURN_NULL(); @@ -2994,7 +2994,7 @@ close_ls(PG_FUNCTION_ARGS) if (lseg_sl(lseg) == line_sl(line)) PG_RETURN_NULL(); - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); if (isnan(lseg_closept_line(result, lseg, line))) PG_RETURN_NULL(); @@ -3066,7 +3066,7 @@ close_sb(PG_FUNCTION_ARGS) BOX *box = PG_GETARG_BOX_P(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); if (isnan(box_closept_lseg(result, box, lseg))) PG_RETURN_NULL(); @@ -4099,7 +4099,7 @@ construct_point(PG_FUNCTION_ARGS) float8 y = PG_GETARG_FLOAT8(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); point_construct(result, x, y); @@ -4122,7 +4122,7 @@ point_add(PG_FUNCTION_ARGS) Point *p2 = PG_GETARG_POINT_P(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); point_add_point(result, p1, p2); @@ -4145,7 +4145,7 @@ point_sub(PG_FUNCTION_ARGS) Point *p2 = PG_GETARG_POINT_P(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); point_sub_point(result, p1, p2); @@ -4170,7 +4170,7 @@ point_mul(PG_FUNCTION_ARGS) Point *p2 = PG_GETARG_POINT_P(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); point_mul_point(result, p1, p2); @@ -4199,7 +4199,7 @@ point_div(PG_FUNCTION_ARGS) Point *p2 = PG_GETARG_POINT_P(1); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); point_div_point(result, p1, p2); @@ -4220,7 +4220,7 @@ points_box(PG_FUNCTION_ARGS) Point *p2 = PG_GETARG_POINT_P(1); BOX *result; - result = (BOX *) palloc(sizeof(BOX)); + result = palloc_object(BOX); box_construct(result, p1, p2); @@ -4234,7 +4234,7 @@ box_add(PG_FUNCTION_ARGS) Point *p = PG_GETARG_POINT_P(1); BOX *result; - result = (BOX *) palloc(sizeof(BOX)); + result = palloc_object(BOX); point_add_point(&result->high, &box->high, p); point_add_point(&result->low, &box->low, p); @@ -4249,7 +4249,7 @@ box_sub(PG_FUNCTION_ARGS) Point *p = PG_GETARG_POINT_P(1); BOX *result; - result = (BOX *) palloc(sizeof(BOX)); + result = palloc_object(BOX); point_sub_point(&result->high, &box->high, p); point_sub_point(&result->low, &box->low, p); @@ -4266,7 +4266,7 @@ box_mul(PG_FUNCTION_ARGS) Point high, low; - result = (BOX *) palloc(sizeof(BOX)); + result = palloc_object(BOX); point_mul_point(&high, &box->high, p); point_mul_point(&low, &box->low, p); @@ -4285,7 +4285,7 @@ box_div(PG_FUNCTION_ARGS) Point high, low; - result = (BOX *) palloc(sizeof(BOX)); + result = palloc_object(BOX); point_div_point(&high, &box->high, p); point_div_point(&low, &box->low, p); @@ -4304,7 +4304,7 @@ point_box(PG_FUNCTION_ARGS) Point *pt = PG_GETARG_POINT_P(0); BOX *box; - box = (BOX *) palloc(sizeof(BOX)); + box = palloc_object(BOX); box->high.x = pt->x; box->low.x = pt->x; @@ -4324,7 +4324,7 @@ boxes_bound_box(PG_FUNCTION_ARGS) *box2 = PG_GETARG_BOX_P(1), *container; - container = (BOX *) palloc(sizeof(BOX)); + container = palloc_object(BOX); container->high.x = float8_max(box1->high.x, box2->high.x); container->low.x = float8_min(box1->low.x, box2->low.x); @@ -4506,7 +4506,7 @@ poly_center(PG_FUNCTION_ARGS) Point *result; CIRCLE circle; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); poly_to_circle(&circle, poly); *result = circle.center; @@ -4521,7 +4521,7 @@ poly_box(PG_FUNCTION_ARGS) POLYGON *poly = PG_GETARG_POLYGON_P(0); BOX *box; - box = (BOX *) palloc(sizeof(BOX)); + box = palloc_object(BOX); *box = poly->boundbox; PG_RETURN_BOX_P(box); @@ -4612,7 +4612,7 @@ circle_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); Node *escontext = fcinfo->context; - CIRCLE *circle = (CIRCLE *) palloc(sizeof(CIRCLE)); + CIRCLE *circle = palloc_object(CIRCLE); char *s, *cp; int depth = 0; @@ -4705,7 +4705,7 @@ circle_recv(PG_FUNCTION_ARGS) StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); CIRCLE *circle; - circle = (CIRCLE *) palloc(sizeof(CIRCLE)); + circle = palloc_object(CIRCLE); circle->center.x = pq_getmsgfloat8(buf); circle->center.y = pq_getmsgfloat8(buf); @@ -4968,7 +4968,7 @@ circle_add_pt(PG_FUNCTION_ARGS) Point *point = PG_GETARG_POINT_P(1); CIRCLE *result; - result = (CIRCLE *) palloc(sizeof(CIRCLE)); + result = palloc_object(CIRCLE); point_add_point(&result->center, &circle->center, point); result->radius = circle->radius; @@ -4983,7 +4983,7 @@ circle_sub_pt(PG_FUNCTION_ARGS) Point *point = PG_GETARG_POINT_P(1); CIRCLE *result; - result = (CIRCLE *) palloc(sizeof(CIRCLE)); + result = palloc_object(CIRCLE); point_sub_point(&result->center, &circle->center, point); result->radius = circle->radius; @@ -5002,7 +5002,7 @@ circle_mul_pt(PG_FUNCTION_ARGS) Point *point = PG_GETARG_POINT_P(1); CIRCLE *result; - result = (CIRCLE *) palloc(sizeof(CIRCLE)); + result = palloc_object(CIRCLE); point_mul_point(&result->center, &circle->center, point); result->radius = float8_mul(circle->radius, hypot(point->x, point->y)); @@ -5017,7 +5017,7 @@ circle_div_pt(PG_FUNCTION_ARGS) Point *point = PG_GETARG_POINT_P(1); CIRCLE *result; - result = (CIRCLE *) palloc(sizeof(CIRCLE)); + result = palloc_object(CIRCLE); point_div_point(&result->center, &circle->center, point); result->radius = float8_div(circle->radius, hypot(point->x, point->y)); @@ -5145,7 +5145,7 @@ circle_center(PG_FUNCTION_ARGS) CIRCLE *circle = PG_GETARG_CIRCLE_P(0); Point *result; - result = (Point *) palloc(sizeof(Point)); + result = palloc_object(Point); result->x = circle->center.x; result->y = circle->center.y; @@ -5173,7 +5173,7 @@ cr_circle(PG_FUNCTION_ARGS) float8 radius = PG_GETARG_FLOAT8(1); CIRCLE *result; - result = (CIRCLE *) palloc(sizeof(CIRCLE)); + result = palloc_object(CIRCLE); result->center.x = center->x; result->center.y = center->y; @@ -5189,7 +5189,7 @@ circle_box(PG_FUNCTION_ARGS) BOX *box; float8 delta; - box = (BOX *) palloc(sizeof(BOX)); + box = palloc_object(BOX); delta = float8_div(circle->radius, sqrt(2.0)); @@ -5210,7 +5210,7 @@ box_circle(PG_FUNCTION_ARGS) BOX *box = PG_GETARG_BOX_P(0); CIRCLE *circle; - circle = (CIRCLE *) palloc(sizeof(CIRCLE)); + circle = palloc_object(CIRCLE); circle->center.x = float8_div(float8_pl(box->high.x, box->low.x), 2.0); circle->center.y = float8_div(float8_pl(box->high.y, box->low.y), 2.0); @@ -5309,7 +5309,7 @@ poly_circle(PG_FUNCTION_ARGS) POLYGON *poly = PG_GETARG_POLYGON_P(0); CIRCLE *result; - result = (CIRCLE *) palloc(sizeof(CIRCLE)); + result = palloc_object(CIRCLE); poly_to_circle(result, poly); diff --git a/src/backend/utils/adt/geo_spgist.c b/src/backend/utils/adt/geo_spgist.c index 4308a3065c..94d351d478 100644 --- a/src/backend/utils/adt/geo_spgist.c +++ b/src/backend/utils/adt/geo_spgist.c @@ -156,7 +156,7 @@ getQuadrant(BOX *centroid, BOX *inBox) static RangeBox * getRangeBox(BOX *box) { - RangeBox *range_box = (RangeBox *) palloc(sizeof(RangeBox)); + RangeBox *range_box = palloc_object(RangeBox); range_box->left.low = box->low.x; range_box->left.high = box->high.x; @@ -176,7 +176,7 @@ getRangeBox(BOX *box) static RectBox * initRectBox(void) { - RectBox *rect_box = (RectBox *) palloc(sizeof(RectBox)); + RectBox *rect_box = palloc_object(RectBox); float8 infinity = get_float8_infinity(); rect_box->range_box_x.left.low = -infinity; @@ -204,7 +204,7 @@ initRectBox(void) static RectBox * nextRectBox(RectBox *rect_box, RangeBox *centroid, uint8 quadrant) { - RectBox *next_rect_box = (RectBox *) palloc(sizeof(RectBox)); + RectBox *next_rect_box = palloc_object(RectBox); memcpy(next_rect_box, rect_box, sizeof(RectBox)); @@ -445,10 +445,10 @@ spg_box_quad_picksplit(PG_FUNCTION_ARGS) BOX *centroid; int median, i; - float8 *lowXs = palloc(sizeof(float8) * in->nTuples); - float8 *highXs = palloc(sizeof(float8) * in->nTuples); - float8 *lowYs = palloc(sizeof(float8) * in->nTuples); - float8 *highYs = palloc(sizeof(float8) * in->nTuples); + float8 *lowXs = palloc_array(float8, in->nTuples); + float8 *highXs = palloc_array(float8, in->nTuples); + float8 *lowYs = palloc_array(float8, in->nTuples); + float8 *highYs = palloc_array(float8, in->nTuples); /* Calculate median of all 4D coordinates */ for (i = 0; i < in->nTuples; i++) @@ -468,7 +468,7 @@ spg_box_quad_picksplit(PG_FUNCTION_ARGS) median = in->nTuples / 2; - centroid = palloc(sizeof(BOX)); + centroid = palloc_object(BOX); centroid->low.x = lowXs[median]; centroid->high.x = highXs[median]; @@ -482,8 +482,8 @@ spg_box_quad_picksplit(PG_FUNCTION_ARGS) out->nNodes = 16; out->nodeLabels = NULL; /* We don't need node labels. */ - out->mapTuplesToNodes = palloc(sizeof(int) * in->nTuples); - out->leafTupleDatums = palloc(sizeof(Datum) * in->nTuples); + out->mapTuplesToNodes = palloc_array(int, in->nTuples); + out->leafTupleDatums = palloc_array(Datum, in->nTuples); /* * Assign ranges to corresponding nodes according to quadrants relative to @@ -574,13 +574,13 @@ spg_box_quad_inner_consistent(PG_FUNCTION_ARGS) { /* Report that all nodes should be visited */ out->nNodes = in->nNodes; - out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes); + out->nodeNumbers = palloc_array(int, in->nNodes); for (i = 0; i < in->nNodes; i++) out->nodeNumbers[i] = i; if (in->norderbys > 0 && in->nNodes > 0) { - double *distances = palloc(sizeof(double) * in->norderbys); + double *distances = palloc_array(double, in->norderbys); int j; for (j = 0; j < in->norderbys; j++) @@ -590,12 +590,12 @@ spg_box_quad_inner_consistent(PG_FUNCTION_ARGS) distances[j] = pointToRectBoxDistance(pt, rect_box); } - out->distances = (double **) palloc(sizeof(double *) * in->nNodes); + out->distances = palloc_array(double *, in->nNodes); out->distances[0] = distances; for (i = 1; i < in->nNodes; i++) { - out->distances[i] = palloc(sizeof(double) * in->norderbys); + out->distances[i] = palloc_array(double, in->norderbys); memcpy(out->distances[i], distances, sizeof(double) * in->norderbys); } @@ -609,7 +609,7 @@ spg_box_quad_inner_consistent(PG_FUNCTION_ARGS) * following operations. */ centroid = getRangeBox(DatumGetBoxP(in->prefixDatum)); - queries = (RangeBox **) palloc(in->nkeys * sizeof(RangeBox *)); + queries = palloc_array(RangeBox *, in->nkeys); for (i = 0; i < in->nkeys; i++) { BOX *box = spg_box_quad_get_scankey_bbox(&in->scankeys[i], NULL); @@ -619,10 +619,10 @@ spg_box_quad_inner_consistent(PG_FUNCTION_ARGS) /* Allocate enough memory for nodes */ out->nNodes = 0; - out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes); - out->traversalValues = (void **) palloc(sizeof(void *) * in->nNodes); + out->nodeNumbers = palloc_array(int, in->nNodes); + out->traversalValues = palloc_array(void *, in->nNodes); if (in->norderbys > 0) - out->distances = (double **) palloc(sizeof(double *) * in->nNodes); + out->distances = palloc_array(double *, in->nNodes); /* * We switch memory context, because we want to allocate memory for new @@ -703,7 +703,7 @@ spg_box_quad_inner_consistent(PG_FUNCTION_ARGS) if (in->norderbys > 0) { - double *distances = palloc(sizeof(double) * in->norderbys); + double *distances = palloc_array(double, in->norderbys); int j; out->distances[out->nNodes] = distances; @@ -878,7 +878,7 @@ spg_poly_quad_compress(PG_FUNCTION_ARGS) POLYGON *polygon = PG_GETARG_POLYGON_P(0); BOX *box; - box = (BOX *) palloc(sizeof(BOX)); + box = palloc_object(BOX); *box = polygon->boundbox; PG_RETURN_BOX_P(box); diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c index b5781989a6..60411ee024 100644 --- a/src/backend/utils/adt/int.c +++ b/src/backend/utils/adt/int.c @@ -1537,7 +1537,7 @@ generate_series_step_int4(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* allocate memory for user context */ - fctx = (generate_series_fctx *) palloc(sizeof(generate_series_fctx)); + fctx = palloc_object(generate_series_fctx); /* * Use fctx to keep state from call to call. Seed current with the diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c index 9cd420b4b9..678f971508 100644 --- a/src/backend/utils/adt/int8.c +++ b/src/backend/utils/adt/int8.c @@ -1411,7 +1411,7 @@ generate_series_step_int8(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* allocate memory for user context */ - fctx = (generate_series_fctx *) palloc(sizeof(generate_series_fctx)); + fctx = palloc_object(generate_series_fctx); /* * Use fctx to keep state from call to call. Seed current with the diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c index 06dd62f000..73cacf33e6 100644 --- a/src/backend/utils/adt/json.c +++ b/src/backend/utils/adt/json.c @@ -807,7 +807,7 @@ json_agg_transfn_worker(FunctionCallInfo fcinfo, bool absent_on_null) * use the right context to enlarge the object if necessary. */ oldcontext = MemoryContextSwitchTo(aggcontext); - state = (JsonAggState *) palloc(sizeof(JsonAggState)); + state = palloc_object(JsonAggState); state->str = makeStringInfo(); MemoryContextSwitchTo(oldcontext); @@ -1029,7 +1029,7 @@ json_object_agg_transfn_worker(FunctionCallInfo fcinfo, * sure they use the right context to enlarge the object if necessary. */ oldcontext = MemoryContextSwitchTo(aggcontext); - state = (JsonAggState *) palloc(sizeof(JsonAggState)); + state = palloc_object(JsonAggState); state->str = makeStringInfo(); if (unique_keys) json_unique_builder_init(&state->unique_check); @@ -1762,7 +1762,7 @@ json_unique_object_start(void *_state) return JSON_SUCCESS; /* push object entry to stack */ - entry = palloc(sizeof(*entry)); + entry = palloc_object(JsonUniqueStackEntry); entry->object_id = state->id_counter++; entry->parent = state->stack; state->stack = entry; diff --git a/src/backend/utils/adt/jsonb_gin.c b/src/backend/utils/adt/jsonb_gin.c index a6d3332bb4..a1daa3f503 100644 --- a/src/backend/utils/adt/jsonb_gin.c +++ b/src/backend/utils/adt/jsonb_gin.c @@ -163,7 +163,7 @@ static void init_gin_entries(GinEntries *entries, int preallocated) { entries->allocated = preallocated; - entries->buf = preallocated ? palloc(sizeof(Datum) * preallocated) : NULL; + entries->buf = preallocated ? palloc_array(Datum, preallocated) : NULL; entries->count = 0; } @@ -178,13 +178,14 @@ add_gin_entry(GinEntries *entries, Datum entry) if (entries->allocated) { entries->allocated *= 2; - entries->buf = repalloc(entries->buf, - sizeof(Datum) * entries->allocated); + entries->buf = repalloc_array(entries->buf, + Datum, + entries->allocated); } else { entries->allocated = 8; - entries->buf = palloc(sizeof(Datum) * entries->allocated); + entries->buf = palloc_array(Datum, entries->allocated); } } @@ -307,7 +308,7 @@ jsonb_ops__add_path_item(JsonPathGinPath *path, JsonPathItem *jsp) return false; } - pentry = palloc(sizeof(*pentry)); + pentry = palloc_object(JsonPathGinPathItem); pentry->type = jsp->type; pentry->keyName = keyName; @@ -785,7 +786,7 @@ extract_jsp_query(JsonPath *jp, StrategyNumber strat, bool pathOps, if (!*nentries) return NULL; - *extra_data = palloc0(sizeof(**extra_data) * entries.count); + *extra_data = palloc0_array(Pointer, entries.count); **extra_data = (Pointer) node; return entries.buf; @@ -869,7 +870,7 @@ gin_extract_jsonb_query(PG_FUNCTION_ARGS) text *query = PG_GETARG_TEXT_PP(0); *nentries = 1; - entries = (Datum *) palloc(sizeof(Datum)); + entries = palloc_object(Datum); entries[0] = make_text_key(JGINFLAG_KEY, VARDATA_ANY(query), VARSIZE_ANY_EXHDR(query)); @@ -887,7 +888,7 @@ gin_extract_jsonb_query(PG_FUNCTION_ARGS) deconstruct_array_builtin(query, TEXTOID, &key_datums, &key_nulls, &key_count); - entries = (Datum *) palloc(sizeof(Datum) * key_count); + entries = palloc_array(Datum, key_count); for (i = 0, j = 0; i < key_count; i++) { @@ -1124,7 +1125,7 @@ gin_extract_jsonb_path(PG_FUNCTION_ARGS) case WJB_BEGIN_OBJECT: /* Push a stack level for this object */ parent = stack; - stack = (PathHashStack *) palloc(sizeof(PathHashStack)); + stack = palloc_object(PathHashStack); /* * We pass forward hashes from outer nesting levels so that diff --git a/src/backend/utils/adt/jsonb_util.c b/src/backend/utils/adt/jsonb_util.c index 1eb8dffa8b..28e1ee18ce 100644 --- a/src/backend/utils/adt/jsonb_util.c +++ b/src/backend/utils/adt/jsonb_util.c @@ -359,7 +359,7 @@ findJsonbValueFromContainer(JsonbContainer *container, uint32 flags, if ((flags & JB_FARRAY) && JsonContainerIsArray(container)) { - JsonbValue *result = palloc(sizeof(JsonbValue)); + JsonbValue *result = palloc_object(JsonbValue); char *base_addr = (char *) (children + count); uint32 offset = 0; int i; @@ -442,7 +442,7 @@ getKeyJsonValueFromContainer(JsonbContainer *container, int index = stopMiddle + count; if (!res) - res = palloc(sizeof(JsonbValue)); + res = palloc_object(JsonbValue); fillJsonbValue(container, index, baseAddr, getJsonbOffset(container, index), @@ -484,7 +484,7 @@ getIthJsonbValueFromContainer(JsonbContainer *container, uint32 i) if (i >= nelements) return NULL; - result = palloc(sizeof(JsonbValue)); + result = palloc_object(JsonbValue); fillJsonbValue(container, i, base_addr, getJsonbOffset(container, i), @@ -1127,7 +1127,7 @@ iteratorFromContainer(JsonbContainer *container, JsonbIterator *parent) { JsonbIterator *it; - it = palloc0(sizeof(JsonbIterator)); + it = palloc0_object(JsonbIterator); it->container = container; it->parent = parent; it->nElems = JsonContainerSize(container); @@ -1373,7 +1373,7 @@ JsonbDeepContains(JsonbIterator **val, JsonbIterator **mContained) uint32 j = 0; /* Make room for all possible values */ - lhsConts = palloc(sizeof(JsonbValue) * nLhsElems); + lhsConts = palloc_array(JsonbValue, nLhsElems); for (i = 0; i < nLhsElems; i++) { diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 22de18bc5b..980e288295 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -593,12 +593,12 @@ jsonb_object_keys(PG_FUNCTION_ARGS) funcctx = SRF_FIRSTCALL_INIT(); oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); - state = palloc(sizeof(OkeysState)); + state = palloc_object(OkeysState); state->result_size = JB_ROOT_COUNT(jb); state->result_count = 0; state->sent_count = 0; - state->result = palloc(state->result_size * sizeof(char *)); + state->result = palloc_array(char *, state->result_size); it = JsonbIteratorInit(&jb->root); @@ -744,14 +744,14 @@ json_object_keys(PG_FUNCTION_ARGS) funcctx = SRF_FIRSTCALL_INIT(); oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); - state = palloc(sizeof(OkeysState)); - sem = palloc0(sizeof(JsonSemAction)); + state = palloc_object(OkeysState); + sem = palloc0_object(JsonSemAction); state->lex = makeJsonLexContext(&lex, json, true); state->result_size = 256; state->result_count = 0; state->sent_count = 0; - state->result = palloc(256 * sizeof(char *)); + state->result = palloc_array(char *, 256); sem->semstate = state; sem->array_start = okeys_array_start; @@ -1045,8 +1045,8 @@ get_path_all(FunctionCallInfo fcinfo, bool as_text) deconstruct_array_builtin(path, TEXTOID, &pathtext, &pathnulls, &npath); - tpath = palloc(npath * sizeof(char *)); - ipath = palloc(npath * sizeof(int)); + tpath = palloc_array(char *, npath); + ipath = palloc_array(int, npath); for (i = 0; i < npath; i++) { @@ -1106,8 +1106,8 @@ get_worker(text *json, int npath, bool normalize_results) { - JsonSemAction *sem = palloc0(sizeof(JsonSemAction)); - GetState *state = palloc0(sizeof(GetState)); + JsonSemAction *sem = palloc0_object(JsonSemAction); + GetState *state = palloc0_object(GetState); Assert(npath >= 0); @@ -1118,8 +1118,8 @@ get_worker(text *json, state->npath = npath; state->path_names = tpath; state->path_indexes = ipath; - state->pathok = palloc0(sizeof(bool) * npath); - state->array_cur_index = palloc(sizeof(int) * npath); + state->pathok = palloc0_array(bool, npath); + state->array_cur_index = palloc_array(int, npath); if (npath > 0) state->pathok[0] = true; @@ -1681,7 +1681,7 @@ jsonb_set_element(Jsonb *jb, const Datum *path, int path_len, { JsonbInState state = {0}; JsonbIterator *it; - bool *path_nulls = palloc0(path_len * sizeof(bool)); + bool *path_nulls = palloc0_array(bool, path_len); if (newval->type == jbvArray && newval->val.array.rawScalar) *newval = newval->val.array.elems[0]; @@ -1726,7 +1726,7 @@ push_path(JsonbInState *st, int level, const Datum *path_elems, * it contains only information about path slice from level to the end, * the access index must be normalized by level. */ - enum jbvType *tpath = palloc0((path_len - level) * sizeof(enum jbvType)); + enum jbvType *tpath = palloc0_array(enum jbvType, path_len - level); JsonbValue newkey; /* @@ -1853,14 +1853,14 @@ json_array_length(PG_FUNCTION_ARGS) JsonLexContext lex; JsonSemAction *sem; - state = palloc0(sizeof(AlenState)); + state = palloc0_object(AlenState); state->lex = makeJsonLexContext(&lex, json, false); /* palloc0 does this for us */ #if 0 state->count = 0; #endif - sem = palloc0(sizeof(JsonSemAction)); + sem = palloc0_object(JsonSemAction); sem->semstate = state; sem->object_start = alen_object_start; sem->scalar = alen_scalar; @@ -2060,8 +2060,8 @@ each_worker(FunctionCallInfo fcinfo, bool as_text) ReturnSetInfo *rsi; EachState *state; - state = palloc0(sizeof(EachState)); - sem = palloc0(sizeof(JsonSemAction)); + state = palloc0_object(EachState); + sem = palloc0_object(JsonSemAction); rsi = (ReturnSetInfo *) fcinfo->resultinfo; @@ -2313,8 +2313,8 @@ elements_worker(FunctionCallInfo fcinfo, const char *funcname, bool as_text) /* elements only needs escaped strings when as_text */ makeJsonLexContext(&lex, json, as_text); - state = palloc0(sizeof(ElementsState)); - sem = palloc0(sizeof(JsonSemAction)); + state = palloc0_object(ElementsState); + sem = palloc0_object(JsonSemAction); InitMaterializedSRF(fcinfo, MAT_SRF_USE_EXPECTED_DESC | MAT_SRF_BLESS); rsi = (ReturnSetInfo *) fcinfo->resultinfo; @@ -2569,8 +2569,8 @@ populate_array_assign_ndims(PopulateArrayContext *ctx, int ndims) } ctx->ndims = ndims; - ctx->dims = palloc(sizeof(int) * ndims); - ctx->sizes = palloc0(sizeof(int) * ndims); + ctx->dims = palloc_array(int, ndims); + ctx->sizes = palloc0_array(int, ndims); for (i = 0; i < ndims; i++) ctx->dims[i] = -1; /* dimensions are unknown yet */ @@ -2955,7 +2955,7 @@ populate_array(ArrayIOData *aio, Assert(ctx.ndims > 0); - lbs = palloc(sizeof(int) * ctx.ndims); + lbs = palloc_array(int, ctx.ndims); for (i = 0; i < ctx.ndims; i++) lbs[i] = 1; @@ -3821,8 +3821,8 @@ get_json_object_as_hash(const char *json, int len, const char *funcname, &ctl, HASH_ELEM | HASH_STRINGS | HASH_CONTEXT); - state = palloc0(sizeof(JHashState)); - sem = palloc0(sizeof(JsonSemAction)); + state = palloc0_object(JHashState); + sem = palloc0_object(JsonSemAction); state->function_name = funcname; state->hash = tab; @@ -4119,7 +4119,7 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname, */ update_cached_tupdesc(&cache->c.io.composite, cache->fn_mcxt); - state = palloc0(sizeof(PopulateRecordsetState)); + state = palloc0_object(PopulateRecordsetState); /* make tuplestore in a sufficiently long-lived memory context */ old_cxt = MemoryContextSwitchTo(rsi->econtext->ecxt_per_query_memory); @@ -4138,7 +4138,7 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname, JsonLexContext lex; JsonSemAction *sem; - sem = palloc0(sizeof(JsonSemAction)); + sem = palloc0_object(JsonSemAction); makeJsonLexContext(&lex, json, true); @@ -4508,8 +4508,8 @@ json_strip_nulls(PG_FUNCTION_ARGS) JsonLexContext lex; JsonSemAction *sem; - state = palloc0(sizeof(StripnullState)); - sem = palloc0(sizeof(JsonSemAction)); + state = palloc0_object(StripnullState); + sem = palloc0_object(JsonSemAction); initStringInfo(&strbuf); state->lex = makeJsonLexContext(&lex, json, true); @@ -5700,8 +5700,8 @@ iterate_json_values(text *json, uint32 flags, void *action_state, JsonIterateStringValuesAction action) { JsonLexContext lex; - JsonSemAction *sem = palloc0(sizeof(JsonSemAction)); - IterateJsonStringValuesState *state = palloc0(sizeof(IterateJsonStringValuesState)); + JsonSemAction *sem = palloc0_object(JsonSemAction); + IterateJsonStringValuesState *state = palloc0_object(IterateJsonStringValuesState); state->lex = makeJsonLexContext(&lex, json, true); state->action = action; @@ -5820,8 +5820,8 @@ transform_json_string_values(text *json, void *action_state, JsonTransformStringValuesAction transform_action) { JsonLexContext lex; - JsonSemAction *sem = palloc0(sizeof(JsonSemAction)); - TransformJsonStringValuesState *state = palloc0(sizeof(TransformJsonStringValuesState)); + JsonSemAction *sem = palloc0_object(JsonSemAction); + TransformJsonStringValuesState *state = palloc0_object(TransformJsonStringValuesState); StringInfoData strbuf; initStringInfo(&strbuf); diff --git a/src/backend/utils/adt/jsonpath_exec.c b/src/backend/utils/adt/jsonpath_exec.c index 3f92baf6e8..fc0e05e878 100644 --- a/src/backend/utils/adt/jsonpath_exec.c +++ b/src/backend/utils/adt/jsonpath_exec.c @@ -775,7 +775,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp, break; } - v = hasNext ? &vbuf : palloc(sizeof(*v)); + v = hasNext ? &vbuf : palloc_object(JsonbValue); baseObject = cxt->baseObject; getJsonPathItem(cxt, jsp, v); @@ -1088,7 +1088,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp, case jpiType: { - JsonbValue *jbv = palloc(sizeof(*jbv)); + JsonbValue *jbv = palloc_object(JsonbValue); jbv->type = jbvString; jbv->val.string.val = pstrdup(JsonbTypeName(jb)); @@ -1118,7 +1118,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp, size = 1; } - jb = palloc(sizeof(*jb)); + jb = palloc_object(JsonbValue); jb->type = jbvNumeric; jb->val.numeric = int64_to_numeric(size); @@ -1249,7 +1249,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp, last = cxt->innermostArraySize - 1; - lastjbv = hasNext ? &tmpjbv : palloc(sizeof(*lastjbv)); + lastjbv = hasNext ? &tmpjbv : palloc_object(JsonbValue); lastjbv->type = jbvNumeric; lastjbv->val.numeric = int64_to_numeric(last); @@ -2162,7 +2162,7 @@ executeBinaryArithmExpr(JsonPathExecContext *cxt, JsonPathItem *jsp, if (!jspGetNext(jsp, &elem) && !found) return jperOk; - lval = palloc(sizeof(*lval)); + lval = palloc_object(JsonbValue); lval->type = jbvNumeric; lval->val.numeric = res; @@ -2317,7 +2317,7 @@ executeNumericItemMethod(JsonPathExecContext *cxt, JsonPathItem *jsp, if (!jspGetNext(jsp, &next) && !found) return jperOk; - jb = palloc(sizeof(*jb)); + jb = palloc_object(JsonbValue); jb->type = jbvNumeric; jb->val.numeric = DatumGetNumeric(datum); @@ -2783,7 +2783,7 @@ executeDateTimeMethod(JsonPathExecContext *cxt, JsonPathItem *jsp, if (!hasNext && !found) return res; - jb = hasNext ? &jbvbuf : palloc(sizeof(*jb)); + jb = hasNext ? &jbvbuf : palloc_object(JsonbValue); jb->type = jbvDatetime; jb->val.datetime.value = value; @@ -3018,7 +3018,7 @@ GetJsonPathVar(void *cxt, char *varName, int varNameLen, return NULL; } - result = palloc(sizeof(JsonbValue)); + result = palloc_object(JsonbValue); if (var->isnull) { *baseObjectId = 0; @@ -3445,7 +3445,7 @@ compareNumeric(Numeric a, Numeric b) static JsonbValue * copyJsonbValue(JsonbValue *src) { - JsonbValue *dst = palloc(sizeof(*dst)); + JsonbValue *dst = palloc_object(JsonbValue); *dst = *src; @@ -4121,7 +4121,7 @@ JsonTableInitOpaque(TableFuncScanState *state, int natts) JsonExpr *je = castNode(JsonExpr, tf->docexpr); List *args = NIL; - cxt = palloc0(sizeof(JsonTableExecContext)); + cxt = palloc0_object(JsonTableExecContext); cxt->magic = JSON_TABLE_EXEC_CONTEXT_MAGIC; /* @@ -4140,7 +4140,7 @@ JsonTableInitOpaque(TableFuncScanState *state, int natts) { ExprState *state = lfirst_node(ExprState, exprlc); String *name = lfirst_node(String, namelc); - JsonPathVariable *var = palloc(sizeof(*var)); + JsonPathVariable *var = palloc_object(JsonPathVariable); var->name = pstrdup(name->sval); var->namelen = strlen(var->name); @@ -4158,8 +4158,7 @@ JsonTableInitOpaque(TableFuncScanState *state, int natts) } } - cxt->colplanstates = palloc(sizeof(JsonTablePlanState *) * - list_length(tf->colvalexprs)); + cxt->colplanstates = palloc_array(JsonTablePlanState *, list_length(tf->colvalexprs)); /* * Initialize plan for the root path and, recursively, also any child @@ -4197,7 +4196,7 @@ JsonTableInitPlan(JsonTableExecContext *cxt, JsonTablePlan *plan, JsonTablePlanState *parentstate, List *args, MemoryContext mcxt) { - JsonTablePlanState *planstate = palloc0(sizeof(*planstate)); + JsonTablePlanState *planstate = palloc0_object(JsonTablePlanState); planstate->plan = plan; planstate->parent = parentstate; diff --git a/src/backend/utils/adt/jsonpath_gram.y b/src/backend/utils/adt/jsonpath_gram.y index 499745a8fe..411a8baf38 100644 --- a/src/backend/utils/adt/jsonpath_gram.y +++ b/src/backend/utils/adt/jsonpath_gram.y @@ -120,7 +120,7 @@ static bool makeItemLikeRegex(JsonPathParseItem *expr, result: mode expr_or_predicate { - *result = palloc(sizeof(JsonPathParseResult)); + *result = palloc_object(JsonPathParseResult); (*result)->expr = $2; (*result)->lax = $1; (void) yynerrs; @@ -384,7 +384,7 @@ method: static JsonPathParseItem * makeItemType(JsonPathItemType type) { - JsonPathParseItem *v = palloc(sizeof(*v)); + JsonPathParseItem *v = palloc_object(JsonPathParseItem); CHECK_FOR_INTERRUPTS(); diff --git a/src/backend/utils/adt/lockfuncs.c b/src/backend/utils/adt/lockfuncs.c index df938812dd..bf38d68aa0 100644 --- a/src/backend/utils/adt/lockfuncs.c +++ b/src/backend/utils/adt/lockfuncs.c @@ -152,7 +152,7 @@ pg_lock_status(PG_FUNCTION_ARGS) * Collect all the locking information that we will format and send * out as a result set. */ - mystatus = (PG_Lock_Status *) palloc(sizeof(PG_Lock_Status)); + mystatus = palloc_object(PG_Lock_Status); funcctx->user_fctx = mystatus; mystatus->lockData = GetLockStatusData(); diff --git a/src/backend/utils/adt/mac.c b/src/backend/utils/adt/mac.c index bb38ef2f5e..35234e700f 100644 --- a/src/backend/utils/adt/mac.c +++ b/src/backend/utils/adt/mac.c @@ -101,7 +101,7 @@ macaddr_in(PG_FUNCTION_ARGS) (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("invalid octet value in \"macaddr\" value: \"%s\"", str))); - result = (macaddr *) palloc(sizeof(macaddr)); + result = palloc_object(macaddr); result->a = a; result->b = b; @@ -142,7 +142,7 @@ macaddr_recv(PG_FUNCTION_ARGS) StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); macaddr *addr; - addr = (macaddr *) palloc(sizeof(macaddr)); + addr = palloc_object(macaddr); addr->a = pq_getmsgbyte(buf); addr->b = pq_getmsgbyte(buf); @@ -289,7 +289,7 @@ macaddr_not(PG_FUNCTION_ARGS) macaddr *addr = PG_GETARG_MACADDR_P(0); macaddr *result; - result = (macaddr *) palloc(sizeof(macaddr)); + result = palloc_object(macaddr); result->a = ~addr->a; result->b = ~addr->b; result->c = ~addr->c; @@ -306,7 +306,7 @@ macaddr_and(PG_FUNCTION_ARGS) macaddr *addr2 = PG_GETARG_MACADDR_P(1); macaddr *result; - result = (macaddr *) palloc(sizeof(macaddr)); + result = palloc_object(macaddr); result->a = addr1->a & addr2->a; result->b = addr1->b & addr2->b; result->c = addr1->c & addr2->c; @@ -323,7 +323,7 @@ macaddr_or(PG_FUNCTION_ARGS) macaddr *addr2 = PG_GETARG_MACADDR_P(1); macaddr *result; - result = (macaddr *) palloc(sizeof(macaddr)); + result = palloc_object(macaddr); result->a = addr1->a | addr2->a; result->b = addr1->b | addr2->b; result->c = addr1->c | addr2->c; @@ -343,7 +343,7 @@ macaddr_trunc(PG_FUNCTION_ARGS) macaddr *addr = PG_GETARG_MACADDR_P(0); macaddr *result; - result = (macaddr *) palloc(sizeof(macaddr)); + result = palloc_object(macaddr); result->a = addr->a; result->b = addr->b; @@ -374,7 +374,7 @@ macaddr_sortsupport(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(ssup->ssup_cxt); - uss = palloc(sizeof(macaddr_sortsupport_state)); + uss = palloc_object(macaddr_sortsupport_state); uss->input_count = 0; uss->estimating = true; initHyperLogLog(&uss->abbr_card, 10); diff --git a/src/backend/utils/adt/mac8.c b/src/backend/utils/adt/mac8.c index 08e41ba4ee..ea715a7a0d 100644 --- a/src/backend/utils/adt/mac8.c +++ b/src/backend/utils/adt/mac8.c @@ -207,7 +207,7 @@ macaddr8_in(PG_FUNCTION_ARGS) else if (count != 8) goto fail; - result = (macaddr8 *) palloc0(sizeof(macaddr8)); + result = palloc0_object(macaddr8); result->a = a; result->b = b; @@ -256,7 +256,7 @@ macaddr8_recv(PG_FUNCTION_ARGS) StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); macaddr8 *addr; - addr = (macaddr8 *) palloc0(sizeof(macaddr8)); + addr = palloc0_object(macaddr8); addr->a = pq_getmsgbyte(buf); addr->b = pq_getmsgbyte(buf); @@ -417,7 +417,7 @@ macaddr8_not(PG_FUNCTION_ARGS) macaddr8 *addr = PG_GETARG_MACADDR8_P(0); macaddr8 *result; - result = (macaddr8 *) palloc0(sizeof(macaddr8)); + result = palloc0_object(macaddr8); result->a = ~addr->a; result->b = ~addr->b; result->c = ~addr->c; @@ -437,7 +437,7 @@ macaddr8_and(PG_FUNCTION_ARGS) macaddr8 *addr2 = PG_GETARG_MACADDR8_P(1); macaddr8 *result; - result = (macaddr8 *) palloc0(sizeof(macaddr8)); + result = palloc0_object(macaddr8); result->a = addr1->a & addr2->a; result->b = addr1->b & addr2->b; result->c = addr1->c & addr2->c; @@ -457,7 +457,7 @@ macaddr8_or(PG_FUNCTION_ARGS) macaddr8 *addr2 = PG_GETARG_MACADDR8_P(1); macaddr8 *result; - result = (macaddr8 *) palloc0(sizeof(macaddr8)); + result = palloc0_object(macaddr8); result->a = addr1->a | addr2->a; result->b = addr1->b | addr2->b; result->c = addr1->c | addr2->c; @@ -479,7 +479,7 @@ macaddr8_trunc(PG_FUNCTION_ARGS) macaddr8 *addr = PG_GETARG_MACADDR8_P(0); macaddr8 *result; - result = (macaddr8 *) palloc0(sizeof(macaddr8)); + result = palloc0_object(macaddr8); result->a = addr->a; result->b = addr->b; @@ -502,7 +502,7 @@ macaddr8_set7bit(PG_FUNCTION_ARGS) macaddr8 *addr = PG_GETARG_MACADDR8_P(0); macaddr8 *result; - result = (macaddr8 *) palloc0(sizeof(macaddr8)); + result = palloc0_object(macaddr8); result->a = addr->a | 0x02; result->b = addr->b; @@ -526,7 +526,7 @@ macaddrtomacaddr8(PG_FUNCTION_ARGS) macaddr *addr6 = PG_GETARG_MACADDR_P(0); macaddr8 *result; - result = (macaddr8 *) palloc0(sizeof(macaddr8)); + result = palloc0_object(macaddr8); result->a = addr6->a; result->b = addr6->b; @@ -547,7 +547,7 @@ macaddr8tomacaddr(PG_FUNCTION_ARGS) macaddr8 *addr = PG_GETARG_MACADDR8_P(0); macaddr *result; - result = (macaddr *) palloc0(sizeof(macaddr)); + result = palloc0_object(macaddr); if ((addr->d != 0xFF) || (addr->e != 0xFE)) ereport(ERROR, diff --git a/src/backend/utils/adt/mcxtfuncs.c b/src/backend/utils/adt/mcxtfuncs.c index fe6dce9cba..46dfb3dd13 100644 --- a/src/backend/utils/adt/mcxtfuncs.c +++ b/src/backend/utils/adt/mcxtfuncs.c @@ -52,7 +52,7 @@ int_list_to_array(const List *list) ArrayType *result_array; length = list_length(list); - datum_array = (Datum *) palloc(length * sizeof(Datum)); + datum_array = palloc_array(Datum, length); foreach_int(i, list) datum_array[foreach_current_index(i)] = Int32GetDatum(i); diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c index a365c432d3..c32f24fbf9 100644 --- a/src/backend/utils/adt/misc.c +++ b/src/backend/utils/adt/misc.c @@ -487,7 +487,7 @@ pg_get_catalog_foreign_keys(PG_FUNCTION_ARGS) * array_in, and it wouldn't be very efficient if we could. Fill an * FmgrInfo to use for the call. */ - arrayinp = (FmgrInfo *) palloc(sizeof(FmgrInfo)); + arrayinp = palloc_object(FmgrInfo); fmgr_info(F_ARRAY_IN, arrayinp); funcctx->user_fctx = arrayinp; diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c index e259644c6c..169acf0ef6 100644 --- a/src/backend/utils/adt/multirangetypes.c +++ b/src/backend/utils/adt/multirangetypes.c @@ -125,7 +125,7 @@ multirange_in(PG_FUNCTION_ARGS) int32 range_count = 0; int32 range_capacity = 8; RangeType *range; - RangeType **ranges = palloc(range_capacity * sizeof(RangeType *)); + RangeType **ranges = palloc_array(RangeType *, range_capacity); MultirangeIOData *cache; MultirangeType *ret; MultirangeParseState parse_state; @@ -348,7 +348,7 @@ multirange_recv(PG_FUNCTION_ARGS) cache = get_multirange_io_data(fcinfo, mltrngtypoid, IOFunc_receive); range_count = pq_getmsgint(buf, 4); - ranges = palloc(range_count * sizeof(RangeType *)); + ranges = palloc_array(RangeType *, range_count); initStringInfo(&tmpbuf); for (int i = 0; i < range_count; i++) @@ -836,7 +836,7 @@ multirange_deserialize(TypeCacheEntry *rangetyp, { int i; - *ranges = palloc(*range_count * sizeof(RangeType *)); + *ranges = palloc_array(RangeType *, *range_count); for (i = 0; i < *range_count; i++) (*ranges)[i] = multirange_get_range(rangetyp, multirange, i); } @@ -2818,7 +2818,7 @@ multirange_unnest(PG_FUNCTION_ARGS) mr = PG_GETARG_MULTIRANGE_P(0); /* allocate memory for user context */ - fctx = (multirange_unnest_fctx *) palloc(sizeof(multirange_unnest_fctx)); + fctx = palloc_object(multirange_unnest_fctx); /* initialize state */ fctx->mr = mr; diff --git a/src/backend/utils/adt/multirangetypes_selfuncs.c b/src/backend/utils/adt/multirangetypes_selfuncs.c index 21f0205d80..fc5a4354fc 100644 --- a/src/backend/utils/adt/multirangetypes_selfuncs.c +++ b/src/backend/utils/adt/multirangetypes_selfuncs.c @@ -496,8 +496,8 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata, * bounds. */ nhist = hslot.nvalues; - hist_lower = (RangeBound *) palloc(sizeof(RangeBound) * nhist); - hist_upper = (RangeBound *) palloc(sizeof(RangeBound) * nhist); + hist_lower = palloc_array(RangeBound, nhist); + hist_upper = palloc_array(RangeBound, nhist); for (i = 0; i < nhist; i++) { bool empty; diff --git a/src/backend/utils/adt/multixactfuncs.c b/src/backend/utils/adt/multixactfuncs.c index e74ea93834..a428e140bc 100644 --- a/src/backend/utils/adt/multixactfuncs.c +++ b/src/backend/utils/adt/multixactfuncs.c @@ -50,7 +50,7 @@ pg_get_multixact_members(PG_FUNCTION_ARGS) funccxt = SRF_FIRSTCALL_INIT(); oldcxt = MemoryContextSwitchTo(funccxt->multi_call_memory_ctx); - multi = palloc(sizeof(mxact)); + multi = palloc_object(mxact); /* no need to allow for old values here */ multi->nmembers = GetMultiXactIdMembers(mxid, &multi->members, false, false); diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c index 3cb0ab6829..3a2002097d 100644 --- a/src/backend/utils/adt/network.c +++ b/src/backend/utils/adt/network.c @@ -75,7 +75,7 @@ network_in(char *src, bool is_cidr, Node *escontext) int bits; inet *dst; - dst = (inet *) palloc0(sizeof(inet)); + dst = (inet *) palloc0_object(inet); /* * First, check to see if this is an IPv6 or IPv4 address. IPv6 addresses @@ -196,7 +196,7 @@ network_recv(StringInfo buf, bool is_cidr) i; /* make sure any unused bits in a CIDR value are zeroed */ - addr = (inet *) palloc0(sizeof(inet)); + addr = palloc0_object(inet); ip_family(addr) = pq_getmsgbyte(buf); if (ip_family(addr) != PGSQL_AF_INET && @@ -363,7 +363,7 @@ cidr_set_masklen(PG_FUNCTION_ARGS) inet * cidr_set_masklen_internal(const inet *src, int bits) { - inet *dst = (inet *) palloc0(sizeof(inet)); + inet *dst = palloc0_object(inet); ip_family(dst) = ip_family(src); ip_bits(dst) = bits; @@ -444,7 +444,7 @@ network_sortsupport(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(ssup->ssup_cxt); - uss = palloc(sizeof(network_sortsupport_state)); + uss = palloc_object(network_sortsupport_state); uss->input_count = 0; uss->estimating = true; initHyperLogLog(&uss->abbr_card, 10); @@ -1227,7 +1227,7 @@ network_broadcast(PG_FUNCTION_ARGS) *b; /* make sure any unused bits are zeroed */ - dst = (inet *) palloc0(sizeof(inet)); + dst = palloc0_object(inet); maxbytes = ip_addrsize(ip); bits = ip_bits(ip); @@ -1271,7 +1271,7 @@ network_network(PG_FUNCTION_ARGS) *b; /* make sure any unused bits are zeroed */ - dst = (inet *) palloc0(sizeof(inet)); + dst = palloc0_object(inet); bits = ip_bits(ip); a = ip_addr(ip); @@ -1314,7 +1314,7 @@ network_netmask(PG_FUNCTION_ARGS) unsigned char *b; /* make sure any unused bits are zeroed */ - dst = (inet *) palloc0(sizeof(inet)); + dst = palloc0_object(inet); bits = ip_bits(ip); b = ip_addr(dst); @@ -1357,7 +1357,7 @@ network_hostmask(PG_FUNCTION_ARGS) unsigned char *b; /* make sure any unused bits are zeroed */ - dst = (inet *) palloc0(sizeof(inet)); + dst = palloc0_object(inet); maxbytes = ip_addrsize(ip); bits = ip_maxbits(ip) - ip_bits(ip); @@ -1792,7 +1792,7 @@ inetnot(PG_FUNCTION_ARGS) inet *ip = PG_GETARG_INET_PP(0); inet *dst; - dst = (inet *) palloc0(sizeof(inet)); + dst = palloc0_object(inet); { int nb = ip_addrsize(ip); @@ -1818,7 +1818,7 @@ inetand(PG_FUNCTION_ARGS) inet *ip2 = PG_GETARG_INET_PP(1); inet *dst; - dst = (inet *) palloc0(sizeof(inet)); + dst = palloc0_object(inet); if (ip_family(ip) != ip_family(ip2)) ereport(ERROR, @@ -1850,7 +1850,7 @@ inetor(PG_FUNCTION_ARGS) inet *ip2 = PG_GETARG_INET_PP(1); inet *dst; - dst = (inet *) palloc0(sizeof(inet)); + dst = palloc0_object(inet); if (ip_family(ip) != ip_family(ip2)) ereport(ERROR, @@ -1880,7 +1880,7 @@ internal_inetpl(inet *ip, int64 addend) { inet *dst; - dst = (inet *) palloc0(sizeof(inet)); + dst = palloc0_object(inet); { int nb = ip_addrsize(ip); diff --git a/src/backend/utils/adt/network_gist.c b/src/backend/utils/adt/network_gist.c index a08c495378..30145f5985 100644 --- a/src/backend/utils/adt/network_gist.c +++ b/src/backend/utils/adt/network_gist.c @@ -475,7 +475,7 @@ build_inet_union_key(int family, int minbits, int commonbits, GistInetKey *result; /* Make sure any unused bits are zeroed. */ - result = (GistInetKey *) palloc0(sizeof(GistInetKey)); + result = palloc0_object(GistInetKey); gk_ip_family(result) = family; gk_ip_minbits(result) = minbits; @@ -546,13 +546,13 @@ inet_gist_compress(PG_FUNCTION_ARGS) if (entry->leafkey) { - retval = palloc(sizeof(GISTENTRY)); + retval = palloc_object(GISTENTRY); if (DatumGetPointer(entry->key) != NULL) { inet *in = DatumGetInetPP(entry->key); GistInetKey *r; - r = (GistInetKey *) palloc0(sizeof(GistInetKey)); + r = palloc0_object(GistInetKey); gk_ip_family(r) = ip_family(in); gk_ip_minbits(r) = ip_bits(in); @@ -594,14 +594,14 @@ inet_gist_fetch(PG_FUNCTION_ARGS) GISTENTRY *retval; inet *dst; - dst = (inet *) palloc0(sizeof(inet)); + dst = palloc0_object(inet); ip_family(dst) = gk_ip_family(key); ip_bits(dst) = gk_ip_minbits(key); memcpy(ip_addr(dst), gk_ip_addr(key), ip_addrsize(dst)); SET_INET_VARSIZE(dst); - retval = palloc(sizeof(GISTENTRY)); + retval = palloc_object(GISTENTRY); gistentryinit(*retval, InetPGetDatum(dst), entry->rel, entry->page, entry->offset, false); diff --git a/src/backend/utils/adt/network_spgist.c b/src/backend/utils/adt/network_spgist.c index a84747d927..9bdacca5ab 100644 --- a/src/backend/utils/adt/network_spgist.c +++ b/src/backend/utils/adt/network_spgist.c @@ -196,8 +196,8 @@ inet_spg_picksplit(PG_FUNCTION_ARGS) /* Don't need labels; allocate output arrays */ out->nodeLabels = NULL; - out->mapTuplesToNodes = (int *) palloc(sizeof(int) * in->nTuples); - out->leafTupleDatums = (Datum *) palloc(sizeof(Datum) * in->nTuples); + out->mapTuplesToNodes = palloc_array(int, in->nTuples); + out->leafTupleDatums = palloc_array(Datum, in->nTuples); if (differentFamilies) { @@ -301,7 +301,7 @@ inet_spg_inner_consistent(PG_FUNCTION_ARGS) if (which) { - out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes); + out->nodeNumbers = palloc_array(int, in->nNodes); for (i = 0; i < in->nNodes; i++) { diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index 1d626aecbe..2460698df0 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -1759,8 +1759,7 @@ generate_series_step_numeric(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* allocate memory for user context */ - fctx = (generate_series_numeric_fctx *) - palloc(sizeof(generate_series_numeric_fctx)); + fctx = palloc_object(generate_series_numeric_fctx); /* * Use fctx to keep state from call to call. Seed current with the @@ -2117,7 +2116,7 @@ numeric_sortsupport(PG_FUNCTION_ARGS) NumericSortSupport *nss; MemoryContext oldcontext = MemoryContextSwitchTo(ssup->ssup_cxt); - nss = palloc(sizeof(NumericSortSupport)); + nss = palloc_object(NumericSortSupport); /* * palloc a buffer for handling unaligned packed values in addition to @@ -4754,7 +4753,7 @@ makeNumericAggState(FunctionCallInfo fcinfo, bool calcSumX2) old_context = MemoryContextSwitchTo(agg_context); - state = (NumericAggState *) palloc0(sizeof(NumericAggState)); + state = palloc0_object(NumericAggState); state->calcSumX2 = calcSumX2; state->agg_context = agg_context; @@ -4772,7 +4771,7 @@ makeNumericAggStateCurrentContext(bool calcSumX2) { NumericAggState *state; - state = (NumericAggState *) palloc0(sizeof(NumericAggState)); + state = palloc0_object(NumericAggState); state->calcSumX2 = calcSumX2; state->agg_context = CurrentMemoryContext; @@ -5418,7 +5417,7 @@ makeInt128AggState(FunctionCallInfo fcinfo, bool calcSumX2) old_context = MemoryContextSwitchTo(agg_context); - state = (Int128AggState *) palloc0(sizeof(Int128AggState)); + state = palloc0_object(Int128AggState); state->calcSumX2 = calcSumX2; MemoryContextSwitchTo(old_context); @@ -5435,7 +5434,7 @@ makeInt128AggStateCurrentContext(bool calcSumX2) { Int128AggState *state; - state = (Int128AggState *) palloc0(sizeof(Int128AggState)); + state = palloc0_object(Int128AggState); state->calcSumX2 = calcSumX2; return state; diff --git a/src/backend/utils/adt/orderedsetaggs.c b/src/backend/utils/adt/orderedsetaggs.c index 2121cc05f2..ac3963fc3e 100644 --- a/src/backend/utils/adt/orderedsetaggs.c +++ b/src/backend/utils/adt/orderedsetaggs.c @@ -153,7 +153,7 @@ ordered_set_startup(FunctionCallInfo fcinfo, bool use_tuples) qcontext = fcinfo->flinfo->fn_mcxt; oldcontext = MemoryContextSwitchTo(qcontext); - qstate = (OSAPerQueryState *) palloc0(sizeof(OSAPerQueryState)); + qstate = palloc0_object(OSAPerQueryState); qstate->aggref = aggref; qstate->qcontext = qcontext; @@ -278,7 +278,7 @@ ordered_set_startup(FunctionCallInfo fcinfo, bool use_tuples) /* Now build the stuff we need in group-lifespan context */ oldcontext = MemoryContextSwitchTo(gcontext); - osastate = (OSAPerGroupState *) palloc(sizeof(OSAPerGroupState)); + osastate = palloc_object(OSAPerGroupState); osastate->qstate = qstate; osastate->gcontext = gcontext; diff --git a/src/backend/utils/adt/pg_locale_libc.c b/src/backend/utils/adt/pg_locale_libc.c index 6ad3f93b54..b125b5da3a 100644 --- a/src/backend/utils/adt/pg_locale_libc.c +++ b/src/backend/utils/adt/pg_locale_libc.c @@ -486,7 +486,7 @@ strlower_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, errmsg("out of memory"))); /* Output workspace cannot have more codes than input bytes */ - workspace = (wchar_t *) palloc((srclen + 1) * sizeof(wchar_t)); + workspace = palloc_array(wchar_t, srclen + 1); char2wchar(workspace, srclen + 1, src, srclen, loc); @@ -591,7 +591,7 @@ strtitle_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, errmsg("out of memory"))); /* Output workspace cannot have more codes than input bytes */ - workspace = (wchar_t *) palloc((srclen + 1) * sizeof(wchar_t)); + workspace = palloc_array(wchar_t, srclen + 1); char2wchar(workspace, srclen + 1, src, srclen, loc); @@ -684,7 +684,7 @@ strupper_libc_mb(char *dest, size_t destsize, const char *src, ssize_t srclen, errmsg("out of memory"))); /* Output workspace cannot have more codes than input bytes */ - workspace = (wchar_t *) palloc((srclen + 1) * sizeof(wchar_t)); + workspace = palloc_array(wchar_t, srclen + 1); char2wchar(workspace, srclen + 1, src, srclen, loc); diff --git a/src/backend/utils/adt/pg_ndistinct.c b/src/backend/utils/adt/pg_ndistinct.c index 34e35aa702..8ff4353c4e 100644 --- a/src/backend/utils/adt/pg_ndistinct.c +++ b/src/backend/utils/adt/pg_ndistinct.c @@ -175,7 +175,7 @@ ndistinct_object_end(void *state) } /* Create the MVNDistinctItem */ - item = palloc(sizeof(MVNDistinctItem)); + item = palloc_object(MVNDistinctItem); item->nattributes = natts; item->attributes = palloc0(natts * sizeof(AttrNumber)); item->ndistinct = (double) parse->ndistinct; diff --git a/src/backend/utils/adt/rangetypes.c b/src/backend/utils/adt/rangetypes.c index d8e5130d64..0c454b136e 100644 --- a/src/backend/utils/adt/rangetypes.c +++ b/src/backend/utils/adt/rangetypes.c @@ -1258,7 +1258,7 @@ range_minus_multi(PG_FUNCTION_ARGS) elog(ERROR, "range types do not match"); /* allocate memory for user context */ - fctx = (struct range_minus_multi_fctx *) palloc(sizeof(struct range_minus_multi_fctx)); + fctx = palloc_object(struct range_minus_multi_fctx); /* * Initialize state. We can't store the range typcache in fn_extra diff --git a/src/backend/utils/adt/rangetypes_gist.c b/src/backend/utils/adt/rangetypes_gist.c index a60ee985e7..33c705e6a8 100644 --- a/src/backend/utils/adt/rangetypes_gist.c +++ b/src/backend/utils/adt/rangetypes_gist.c @@ -251,7 +251,7 @@ multirange_gist_compress(PG_FUNCTION_ARGS) MultirangeType *mr = DatumGetMultirangeTypeP(entry->key); RangeType *r; TypeCacheEntry *typcache; - GISTENTRY *retval = palloc(sizeof(GISTENTRY)); + GISTENTRY *retval = palloc_object(GISTENTRY); typcache = multirange_get_typcache(fcinfo, MultirangeTypeGetOid(mr)); r = multirange_get_union_range(typcache->rngtype, mr); @@ -1240,8 +1240,7 @@ range_gist_single_sorting_split(TypeCacheEntry *typcache, maxoff = entryvec->n - 1; - sortItems = (SingleBoundSortItem *) - palloc(maxoff * sizeof(SingleBoundSortItem)); + sortItems = palloc_array(SingleBoundSortItem, maxoff); /* * Prepare auxiliary array and sort the values. @@ -1343,8 +1342,8 @@ range_gist_double_sorting_split(TypeCacheEntry *typcache, context.first = true; /* Allocate arrays for sorted range bounds */ - by_lower = (NonEmptyRange *) palloc(nentries * sizeof(NonEmptyRange)); - by_upper = (NonEmptyRange *) palloc(nentries * sizeof(NonEmptyRange)); + by_lower = palloc_array(NonEmptyRange, nentries); + by_upper = palloc_array(NonEmptyRange, nentries); /* Fill arrays of bounds */ for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) @@ -1499,8 +1498,8 @@ range_gist_double_sorting_split(TypeCacheEntry *typcache, */ /* Allocate vectors for results */ - v->spl_left = (OffsetNumber *) palloc(nentries * sizeof(OffsetNumber)); - v->spl_right = (OffsetNumber *) palloc(nentries * sizeof(OffsetNumber)); + v->spl_left = palloc_array(OffsetNumber, nentries); + v->spl_right = palloc_array(OffsetNumber, nentries); v->spl_nleft = 0; v->spl_nright = 0; @@ -1509,7 +1508,7 @@ range_gist_double_sorting_split(TypeCacheEntry *typcache, * either group without affecting overlap along selected axis. */ common_entries_count = 0; - common_entries = (CommonEntry *) palloc(nentries * sizeof(CommonEntry)); + common_entries = palloc_array(CommonEntry, nentries); /* * Distribute entries which can be distributed unambiguously, and collect diff --git a/src/backend/utils/adt/rangetypes_selfuncs.c b/src/backend/utils/adt/rangetypes_selfuncs.c index d85252cafb..27d736a40e 100644 --- a/src/backend/utils/adt/rangetypes_selfuncs.c +++ b/src/backend/utils/adt/rangetypes_selfuncs.c @@ -412,8 +412,8 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata, * bounds. */ nhist = hslot.nvalues; - hist_lower = (RangeBound *) palloc(sizeof(RangeBound) * nhist); - hist_upper = (RangeBound *) palloc(sizeof(RangeBound) * nhist); + hist_lower = palloc_array(RangeBound, nhist); + hist_upper = palloc_array(RangeBound, nhist); for (i = 0; i < nhist; i++) { range_deserialize(typcache, DatumGetRangeTypeP(hslot.values[i]), diff --git a/src/backend/utils/adt/rangetypes_spgist.c b/src/backend/utils/adt/rangetypes_spgist.c index be51965488..14e5d6065f 100644 --- a/src/backend/utils/adt/rangetypes_spgist.c +++ b/src/backend/utils/adt/rangetypes_spgist.c @@ -216,8 +216,8 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS) RangeTypeGetOid(DatumGetRangeTypeP(in->datums[0]))); /* Allocate memory for bounds */ - lowerBounds = palloc(sizeof(RangeBound) * in->nTuples); - upperBounds = palloc(sizeof(RangeBound) * in->nTuples); + lowerBounds = palloc_array(RangeBound, in->nTuples); + upperBounds = palloc_array(RangeBound, in->nTuples); j = 0; /* Deserialize bounds of ranges, count non-empty ranges */ @@ -243,8 +243,8 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS) out->prefixDatum = PointerGetDatum(NULL); out->nodeLabels = NULL; - out->mapTuplesToNodes = palloc(sizeof(int) * in->nTuples); - out->leafTupleDatums = palloc(sizeof(Datum) * in->nTuples); + out->mapTuplesToNodes = palloc_array(int, in->nTuples); + out->leafTupleDatums = palloc_array(Datum, in->nTuples); /* Place all ranges into node 0 */ for (i = 0; i < in->nTuples; i++) @@ -273,8 +273,8 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS) out->nNodes = (in->level == 0) ? 5 : 4; out->nodeLabels = NULL; /* we don't need node labels */ - out->mapTuplesToNodes = palloc(sizeof(int) * in->nTuples); - out->leafTupleDatums = palloc(sizeof(Datum) * in->nTuples); + out->mapTuplesToNodes = palloc_array(int, in->nTuples); + out->leafTupleDatums = palloc_array(Datum, in->nTuples); /* * Assign ranges to corresponding nodes according to quadrants relative to @@ -316,7 +316,7 @@ spg_range_quad_inner_consistent(PG_FUNCTION_ARGS) { /* Report that all nodes should be visited */ out->nNodes = in->nNodes; - out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes); + out->nodeNumbers = palloc_array(int, in->nNodes); for (i = 0; i < in->nNodes; i++) out->nodeNumbers[i] = i; PG_RETURN_VOID(); @@ -732,9 +732,9 @@ spg_range_quad_inner_consistent(PG_FUNCTION_ARGS) } /* We must descend into the quadrant(s) identified by 'which' */ - out->nodeNumbers = (int *) palloc(sizeof(int) * in->nNodes); + out->nodeNumbers = palloc_array(int, in->nNodes); if (needPrevious) - out->traversalValues = (void **) palloc(sizeof(void *) * in->nNodes); + out->traversalValues = palloc_array(void *, in->nNodes); out->nNodes = 0; /* diff --git a/src/backend/utils/adt/rangetypes_typanalyze.c b/src/backend/utils/adt/rangetypes_typanalyze.c index 36e885af2d..45ea6cbc78 100644 --- a/src/backend/utils/adt/rangetypes_typanalyze.c +++ b/src/backend/utils/adt/rangetypes_typanalyze.c @@ -151,9 +151,9 @@ compute_range_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc, has_subdiff = OidIsValid(typcache->rng_subdiff_finfo.fn_oid); /* Allocate memory to hold range bounds and lengths of the sample ranges. */ - lowers = (RangeBound *) palloc(sizeof(RangeBound) * samplerows); - uppers = (RangeBound *) palloc(sizeof(RangeBound) * samplerows); - lengths = (float8 *) palloc(sizeof(float8) * samplerows); + lowers = palloc_array(RangeBound, samplerows); + uppers = palloc_array(RangeBound, samplerows); + lengths = palloc_array(float8, samplerows); /* Loop over the sample ranges. */ for (range_no = 0; range_no < samplerows; range_no++) @@ -401,7 +401,7 @@ compute_range_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc, stats->statypalign[slot_idx] = 'd'; /* Store the fraction of empty ranges */ - emptyfrac = (float4 *) palloc(sizeof(float4)); + emptyfrac = palloc_object(float4); *emptyfrac = ((double) empty_cnt) / ((double) non_null_cnt); stats->stanumbers[slot_idx] = emptyfrac; stats->numnumbers[slot_idx] = 1; diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c index b0cdef9b19..6542e8c1df 100644 --- a/src/backend/utils/adt/regexp.c +++ b/src/backend/utils/adt/regexp.c @@ -189,7 +189,7 @@ RE_compile_and_cache(text *text_re, int cflags, Oid collation) */ /* Convert pattern string to wide characters */ - pattern = (pg_wchar *) palloc((text_re_len + 1) * sizeof(pg_wchar)); + pattern = palloc_array(pg_wchar, text_re_len + 1); pattern_len = pg_mb2wchar_with_len(text_re_val, pattern, text_re_len); @@ -329,7 +329,7 @@ RE_execute(regex_t *re, char *dat, int dat_len, bool match; /* Convert data string to wide characters */ - data = (pg_wchar *) palloc((dat_len + 1) * sizeof(pg_wchar)); + data = palloc_array(pg_wchar, dat_len + 1); data_len = pg_mb2wchar_with_len(dat, data, dat_len); /* Perform RE match and return result */ @@ -1389,8 +1389,8 @@ regexp_match(PG_FUNCTION_ARGS) Assert(matchctx->nmatches == 1); /* Create workspace that build_regexp_match_result needs */ - matchctx->elems = (Datum *) palloc(sizeof(Datum) * matchctx->npatterns); - matchctx->nulls = (bool *) palloc(sizeof(bool) * matchctx->npatterns); + matchctx->elems = palloc_array(Datum, matchctx->npatterns); + matchctx->nulls = palloc_array(bool, matchctx->npatterns); PG_RETURN_DATUM(PointerGetDatum(build_regexp_match_result(matchctx))); } @@ -1432,8 +1432,8 @@ regexp_matches(PG_FUNCTION_ARGS) true, false, false); /* Pre-create workspace that build_regexp_match_result needs */ - matchctx->elems = (Datum *) palloc(sizeof(Datum) * matchctx->npatterns); - matchctx->nulls = (bool *) palloc(sizeof(bool) * matchctx->npatterns); + matchctx->elems = palloc_array(Datum, matchctx->npatterns); + matchctx->nulls = palloc_array(bool, matchctx->npatterns); MemoryContextSwitchTo(oldcontext); funcctx->user_fctx = matchctx; @@ -1489,7 +1489,7 @@ setup_regexp_matches(text *orig_str, text *pattern, pg_re_flags *re_flags, bool ignore_degenerate, bool fetching_unmatched) { - regexp_matches_ctx *matchctx = palloc0(sizeof(regexp_matches_ctx)); + regexp_matches_ctx *matchctx = palloc0_object(regexp_matches_ctx); int eml = pg_database_encoding_max_length(); int orig_len; pg_wchar *wide_str; @@ -1509,7 +1509,7 @@ setup_regexp_matches(text *orig_str, text *pattern, pg_re_flags *re_flags, /* convert string to pg_wchar form for matching */ orig_len = VARSIZE_ANY_EXHDR(orig_str); - wide_str = (pg_wchar *) palloc(sizeof(pg_wchar) * (orig_len + 1)); + wide_str = palloc_array(pg_wchar, orig_len + 1); wide_len = pg_mb2wchar_with_len(VARDATA_ANY(orig_str), wide_str, orig_len); /* set up the compiled pattern */ @@ -1532,7 +1532,7 @@ setup_regexp_matches(text *orig_str, text *pattern, pg_re_flags *re_flags, } /* temporary output space for RE package */ - pmatch = palloc(sizeof(regmatch_t) * pmatch_len); + pmatch = palloc_array(regmatch_t, pmatch_len); /* * the real output space (grown dynamically if needed) @@ -1541,7 +1541,7 @@ setup_regexp_matches(text *orig_str, text *pattern, pg_re_flags *re_flags, * than at 2^27 */ array_len = re_flags->glob ? 255 : 31; - matchctx->match_locs = (int *) palloc(sizeof(int) * array_len); + matchctx->match_locs = palloc_array(int, array_len); array_idx = 0; /* search for the pattern, perhaps repeatedly */ diff --git a/src/backend/utils/adt/rowtypes.c b/src/backend/utils/adt/rowtypes.c index 38e6fe1c43..7220995ce2 100644 --- a/src/backend/utils/adt/rowtypes.c +++ b/src/backend/utils/adt/rowtypes.c @@ -140,8 +140,8 @@ record_in(PG_FUNCTION_ARGS) my_extra->ncolumns = ncolumns; } - values = (Datum *) palloc(ncolumns * sizeof(Datum)); - nulls = (bool *) palloc(ncolumns * sizeof(bool)); + values = palloc_array(Datum, ncolumns); + nulls = palloc_array(bool, ncolumns); /* * Scan the string. We use "buf" to accumulate the de-quoted data for @@ -383,8 +383,8 @@ record_out(PG_FUNCTION_ARGS) my_extra->ncolumns = ncolumns; } - values = (Datum *) palloc(ncolumns * sizeof(Datum)); - nulls = (bool *) palloc(ncolumns * sizeof(bool)); + values = palloc_array(Datum, ncolumns); + nulls = palloc_array(bool, ncolumns); /* Break down the tuple into fields */ heap_deform_tuple(&tuple, tupdesc, values, nulls); @@ -539,8 +539,8 @@ record_recv(PG_FUNCTION_ARGS) my_extra->ncolumns = ncolumns; } - values = (Datum *) palloc(ncolumns * sizeof(Datum)); - nulls = (bool *) palloc(ncolumns * sizeof(bool)); + values = palloc_array(Datum, ncolumns); + nulls = palloc_array(bool, ncolumns); /* Fetch number of columns user thinks it has */ usercols = pq_getmsgint(buf, 4); @@ -741,8 +741,8 @@ record_send(PG_FUNCTION_ARGS) my_extra->ncolumns = ncolumns; } - values = (Datum *) palloc(ncolumns * sizeof(Datum)); - nulls = (bool *) palloc(ncolumns * sizeof(bool)); + values = palloc_array(Datum, ncolumns); + nulls = palloc_array(bool, ncolumns); /* Break down the tuple into fields */ heap_deform_tuple(&tuple, tupdesc, values, nulls); @@ -1863,8 +1863,8 @@ hash_record(PG_FUNCTION_ARGS) } /* Break down the tuple into fields */ - values = (Datum *) palloc(ncolumns * sizeof(Datum)); - nulls = (bool *) palloc(ncolumns * sizeof(bool)); + values = palloc_array(Datum, ncolumns); + nulls = palloc_array(bool, ncolumns); heap_deform_tuple(&tuple, tupdesc, values, nulls); for (int i = 0; i < ncolumns; i++) @@ -1984,8 +1984,8 @@ hash_record_extended(PG_FUNCTION_ARGS) } /* Break down the tuple into fields */ - values = (Datum *) palloc(ncolumns * sizeof(Datum)); - nulls = (bool *) palloc(ncolumns * sizeof(bool)); + values = palloc_array(Datum, ncolumns); + nulls = palloc_array(bool, ncolumns); heap_deform_tuple(&tuple, tupdesc, values, nulls); for (int i = 0; i < ncolumns; i++) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 6cf90be40b..9f85eb86da 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -3713,7 +3713,7 @@ deparse_context_for(const char *aliasname, Oid relid) deparse_namespace *dpns; RangeTblEntry *rte; - dpns = (deparse_namespace *) palloc0(sizeof(deparse_namespace)); + dpns = palloc0_object(deparse_namespace); /* Build a minimal RTE for the rel */ rte = makeNode(RangeTblEntry); @@ -3757,7 +3757,7 @@ deparse_context_for_plan_tree(PlannedStmt *pstmt, List *rtable_names) { deparse_namespace *dpns; - dpns = (deparse_namespace *) palloc0(sizeof(deparse_namespace)); + dpns = palloc0_object(deparse_namespace); /* Initialize fields that stay the same across the whole plan tree */ dpns->rtable = pstmt->rtable; diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 540aa9628d..c760b19db5 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -3683,7 +3683,7 @@ add_unique_group_var(PlannerInfo *root, List *varinfos, } } - varinfo = (GroupVarInfo *) palloc(sizeof(GroupVarInfo)); + varinfo = palloc_object(GroupVarInfo); varinfo->var = var; varinfo->rel = vardata->rel; @@ -4264,7 +4264,7 @@ estimate_multivariate_bucketsize(PlannerInfo *root, RelOptInfo *inner, * estimate_multivariate_ndistinct(), which doesn't care about * ndistinct and isdefault fields. Thus, skip these fields. */ - varinfo = (GroupVarInfo *) palloc0(sizeof(GroupVarInfo)); + varinfo = palloc0_object(GroupVarInfo); varinfo->var = expr; varinfo->rel = root->simple_rel_array[relid]; varinfos = lappend(varinfos, varinfo); diff --git a/src/backend/utils/adt/skipsupport.c b/src/backend/utils/adt/skipsupport.c index 2bd35d2d27..2fcf5782ec 100644 --- a/src/backend/utils/adt/skipsupport.c +++ b/src/backend/utils/adt/skipsupport.c @@ -38,7 +38,7 @@ PrepareSkipSupportFromOpclass(Oid opfamily, Oid opcintype, bool reverse) if (!OidIsValid(skipSupportFunction)) return NULL; - sksup = palloc(sizeof(SkipSupportData)); + sksup = palloc_object(SkipSupportData); OidFunctionCall1(skipSupportFunction, PointerGetDatum(sksup)); if (reverse) diff --git a/src/backend/utils/adt/tid.c b/src/backend/utils/adt/tid.c index 0cfb0bd373..435d40fee3 100644 --- a/src/backend/utils/adt/tid.c +++ b/src/backend/utils/adt/tid.c @@ -104,7 +104,7 @@ tidin(PG_FUNCTION_ARGS) "tid", str))); offsetNumber = (OffsetNumber) cvt; - result = (ItemPointer) palloc(sizeof(ItemPointerData)); + result = (ItemPointer) palloc_object(ItemPointerData); ItemPointerSet(result, blockNumber, offsetNumber); @@ -146,7 +146,7 @@ tidrecv(PG_FUNCTION_ARGS) blockNumber = pq_getmsgint(buf, sizeof(blockNumber)); offsetNumber = pq_getmsgint(buf, sizeof(offsetNumber)); - result = (ItemPointer) palloc(sizeof(ItemPointerData)); + result = (ItemPointer) palloc_object(ItemPointerData); ItemPointerSet(result, blockNumber, offsetNumber); @@ -300,7 +300,7 @@ currtid_internal(Relation rel, const ItemPointerData *tid) Snapshot snapshot; TableScanDesc scan; - result = (ItemPointer) palloc(sizeof(ItemPointerData)); + result = (ItemPointer) palloc_object(ItemPointerData); aclresult = pg_class_aclcheck(RelationGetRelid(rel), GetUserId(), ACL_SELECT); diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 2dc90a2b8a..3569d201ee 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -937,7 +937,7 @@ interval_in(PG_FUNCTION_ARGS) PG_RETURN_NULL(); } - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); switch (dtype) { @@ -1004,7 +1004,7 @@ interval_recv(PG_FUNCTION_ARGS) int32 typmod = PG_GETARG_INT32(2); Interval *interval; - interval = (Interval *) palloc(sizeof(Interval)); + interval = palloc_object(Interval); interval->time = pq_getmsgint64(buf); interval->day = pq_getmsgint(buf, sizeof(interval->day)); @@ -1331,7 +1331,7 @@ interval_scale(PG_FUNCTION_ARGS) int32 typmod = PG_GETARG_INT32(1); Interval *result; - result = palloc(sizeof(Interval)); + result = palloc_object(Interval); *result = *interval; AdjustIntervalForTypmod(result, typmod, NULL); @@ -1545,7 +1545,7 @@ make_interval(PG_FUNCTION_ARGS) if (isinf(secs) || isnan(secs)) goto out_of_range; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); /* years and months -> months */ if (pg_mul_s32_overflow(years, MONTHS_PER_YEAR, &result->month) || @@ -2830,7 +2830,7 @@ timestamp_mi(PG_FUNCTION_ARGS) Timestamp dt2 = PG_GETARG_TIMESTAMP(1); Interval *result; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); /* * Handle infinities. @@ -2925,7 +2925,7 @@ interval_justify_interval(PG_FUNCTION_ARGS) TimeOffset wholeday; int32 wholemonth; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); result->month = span->month; result->day = span->day; result->time = span->time; @@ -3004,7 +3004,7 @@ interval_justify_hours(PG_FUNCTION_ARGS) Interval *result; TimeOffset wholeday; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); result->month = span->month; result->day = span->day; result->time = span->time; @@ -3046,7 +3046,7 @@ interval_justify_days(PG_FUNCTION_ARGS) Interval *result; int32 wholemonth; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); result->month = span->month; result->day = span->day; result->time = span->time; @@ -3448,7 +3448,7 @@ interval_um(PG_FUNCTION_ARGS) Interval *interval = PG_GETARG_INTERVAL_P(0); Interval *result; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); interval_um_internal(interval, result); PG_RETURN_INTERVAL_P(result); @@ -3506,7 +3506,7 @@ interval_pl(PG_FUNCTION_ARGS) Interval *span2 = PG_GETARG_INTERVAL_P(1); Interval *result; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); /* * Handle infinities. @@ -3562,7 +3562,7 @@ interval_mi(PG_FUNCTION_ARGS) Interval *span2 = PG_GETARG_INTERVAL_P(1); Interval *result; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); /* * Handle infinities. @@ -3616,7 +3616,7 @@ interval_mul(PG_FUNCTION_ARGS) orig_day = span->day; Interval *result; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); /* * Handle NaN and infinities. @@ -3746,7 +3746,7 @@ interval_div(PG_FUNCTION_ARGS) orig_day = span->day; Interval *result; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); if (factor == 0.0) ereport(ERROR, @@ -3975,7 +3975,7 @@ makeIntervalAggState(FunctionCallInfo fcinfo) old_context = MemoryContextSwitchTo(agg_context); - state = (IntervalAggState *) palloc0(sizeof(IntervalAggState)); + state = palloc0_object(IntervalAggState); MemoryContextSwitchTo(old_context); @@ -4162,7 +4162,7 @@ interval_avg_deserialize(PG_FUNCTION_ARGS) initReadOnlyStringInfo(&buf, VARDATA_ANY(sstate), VARSIZE_ANY_EXHDR(sstate)); - result = (IntervalAggState *) palloc0(sizeof(IntervalAggState)); + result = palloc0_object(IntervalAggState); /* N */ result->N = pq_getmsgint64(&buf); @@ -4229,7 +4229,7 @@ interval_avg(PG_FUNCTION_ARGS) (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("interval out of range"))); - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); if (state->pInfcount > 0) INTERVAL_NOEND(result); else @@ -4266,7 +4266,7 @@ interval_sum(PG_FUNCTION_ARGS) (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("interval out of range"))); - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); if (state->pInfcount > 0) INTERVAL_NOEND(result); @@ -4299,7 +4299,7 @@ timestamp_age(PG_FUNCTION_ARGS) struct pg_tm tt2, *tm2 = &tt2; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); /* * Handle infinities. @@ -4447,7 +4447,7 @@ timestamptz_age(PG_FUNCTION_ARGS) int tz1; int tz2; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); /* * Handle infinities. @@ -5120,7 +5120,7 @@ interval_trunc(PG_FUNCTION_ARGS) struct pg_itm tt, *tm = &tt; - result = (Interval *) palloc(sizeof(Interval)); + result = palloc_object(Interval); lowunits = downcase_truncate_identifier(VARDATA_ANY(units), VARSIZE_ANY_EXHDR(units), @@ -6687,8 +6687,7 @@ generate_series_timestamp(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* allocate memory for user context */ - fctx = (generate_series_timestamp_fctx *) - palloc(sizeof(generate_series_timestamp_fctx)); + fctx = palloc_object(generate_series_timestamp_fctx); /* * Use fctx to keep state from call to call. Seed current with the @@ -6772,8 +6771,7 @@ generate_series_timestamptz_internal(FunctionCallInfo fcinfo) oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); /* allocate memory for user context */ - fctx = (generate_series_timestamptz_fctx *) - palloc(sizeof(generate_series_timestamptz_fctx)); + fctx = palloc_object(generate_series_timestamptz_fctx); /* * Use fctx to keep state from call to call. Seed current with the diff --git a/src/backend/utils/adt/tsginidx.c b/src/backend/utils/adt/tsginidx.c index 2712fd89df..24a1cbe89e 100644 --- a/src/backend/utils/adt/tsginidx.c +++ b/src/backend/utils/adt/tsginidx.c @@ -73,7 +73,7 @@ gin_extract_tsvector(PG_FUNCTION_ARGS) int i; WordEntry *we = ARRPTR(vector); - entries = (Datum *) palloc(sizeof(Datum) * vector->size); + entries = palloc_array(Datum, vector->size); for (i = 0; i < vector->size; i++) { @@ -133,16 +133,16 @@ gin_extract_tsquery(PG_FUNCTION_ARGS) } *nentries = j; - entries = (Datum *) palloc(sizeof(Datum) * j); - partialmatch = *ptr_partialmatch = (bool *) palloc(sizeof(bool) * j); + entries = palloc_array(Datum, j); + partialmatch = *ptr_partialmatch = palloc_array(bool, j); /* * Make map to convert item's number to corresponding operand's (the * same, entry's) number. Entry's number is used in check array in * consistent method. We use the same map for each entry. */ - *extra_data = (Pointer *) palloc(sizeof(Pointer) * j); - map_item_operand = (int *) palloc0(sizeof(int) * query->size); + *extra_data = palloc_array(Pointer, j); + map_item_operand = palloc0_array(int, query->size); /* Now rescan the VAL items and fill in the arrays */ j = 0; diff --git a/src/backend/utils/adt/tsgistidx.c b/src/backend/utils/adt/tsgistidx.c index 935187b37c..01e43f8621 100644 --- a/src/backend/utils/adt/tsgistidx.c +++ b/src/backend/utils/adt/tsgistidx.c @@ -212,7 +212,7 @@ gtsvector_compress(PG_FUNCTION_ARGS) res = ressign; } - retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); + retval = palloc_object(GISTENTRY); gistentryinit(*retval, PointerGetDatum(res), entry->rel, entry->page, entry->offset, false); @@ -231,7 +231,7 @@ gtsvector_compress(PG_FUNCTION_ARGS) } res = gtsvector_alloc(SIGNKEY | ALLISTRUE, siglen, sign); - retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); + retval = palloc_object(GISTENTRY); gistentryinit(*retval, PointerGetDatum(res), entry->rel, entry->page, entry->offset, false); @@ -251,7 +251,7 @@ gtsvector_decompress(PG_FUNCTION_ARGS) if (key != (SignTSVector *) DatumGetPointer(entry->key)) { - GISTENTRY *retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); + GISTENTRY *retval = palloc_object(GISTENTRY); gistentryinit(*retval, PointerGetDatum(key), entry->rel, entry->page, @@ -641,7 +641,7 @@ gtsvector_picksplit(PG_FUNCTION_ARGS) v->spl_left = (OffsetNumber *) palloc(nbytes); v->spl_right = (OffsetNumber *) palloc(nbytes); - cache = (CACHESIGN *) palloc(sizeof(CACHESIGN) * (maxoff + 2)); + cache = palloc_array(CACHESIGN, maxoff + 2); cache_sign = palloc(siglen * (maxoff + 2)); for (j = 0; j < maxoff + 2; j++) @@ -688,7 +688,7 @@ gtsvector_picksplit(PG_FUNCTION_ARGS) maxoff = OffsetNumberNext(maxoff); fillcache(&cache[maxoff], GETENTRY(entryvec, maxoff), siglen); /* sort before ... */ - costvector = (SPLITCOST *) palloc(sizeof(SPLITCOST) * maxoff); + costvector = palloc_array(SPLITCOST, maxoff); for (j = FirstOffsetNumber; j <= maxoff; j = OffsetNumberNext(j)) { costvector[j - 1].pos = j; diff --git a/src/backend/utils/adt/tsquery.c b/src/backend/utils/adt/tsquery.c index 717de8073d..a0c990fdfa 100644 --- a/src/backend/utils/adt/tsquery.c +++ b/src/backend/utils/adt/tsquery.c @@ -534,7 +534,7 @@ pushOperator(TSQueryParserState state, int8 oper, int16 distance) Assert(oper == OP_NOT || oper == OP_AND || oper == OP_OR || oper == OP_PHRASE); - tmp = (QueryOperator *) palloc0(sizeof(QueryOperator)); + tmp = palloc0_object(QueryOperator); tmp->type = QI_OPR; tmp->oper = oper; tmp->distance = (oper == OP_PHRASE) ? distance : 0; @@ -559,7 +559,7 @@ pushValue_internal(TSQueryParserState state, pg_crc32 valcrc, int distance, int errmsg("operand is too long in tsquery: \"%s\"", state->buffer))); - tmp = (QueryOperand *) palloc0(sizeof(QueryOperand)); + tmp = palloc0_object(QueryOperand); tmp->type = QI_VAL; tmp->weight = weight; tmp->prefix = prefix; @@ -617,7 +617,7 @@ pushStop(TSQueryParserState state) { QueryOperand *tmp; - tmp = (QueryOperand *) palloc0(sizeof(QueryOperand)); + tmp = palloc0_object(QueryOperand); tmp->type = QI_VALSTOP; state->polstr = lcons(tmp, state->polstr); @@ -1101,7 +1101,7 @@ infix(INFIX *in, int parentPriority, bool rightPhraseOp) nrm.curpol = in->curpol; nrm.op = in->op; nrm.buflen = 16; - nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen); + nrm.cur = nrm.buf = palloc_array(char, nrm.buflen); /* get right operand */ infix(&nrm, priority, (op == OP_PHRASE)); @@ -1157,7 +1157,7 @@ tsqueryout(PG_FUNCTION_ARGS) } nrm.curpol = GETQUERY(query); nrm.buflen = 32; - nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen); + nrm.cur = nrm.buf = palloc_array(char, nrm.buflen); *(nrm.cur) = '\0'; nrm.op = GETOPERAND(query); infix(&nrm, -1 /* lowest priority */ , false); @@ -1385,7 +1385,7 @@ tsquerytree(PG_FUNCTION_ARGS) { nrm.curpol = q; nrm.buflen = 32; - nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen); + nrm.cur = nrm.buf = palloc_array(char, nrm.buflen); *(nrm.cur) = '\0'; nrm.op = GETOPERAND(query); infix(&nrm, -1, false); diff --git a/src/backend/utils/adt/tsquery_cleanup.c b/src/backend/utils/adt/tsquery_cleanup.c index 590d7c7989..45de2da900 100644 --- a/src/backend/utils/adt/tsquery_cleanup.c +++ b/src/backend/utils/adt/tsquery_cleanup.c @@ -32,7 +32,7 @@ typedef struct NODE static NODE * maketree(QueryItem *in) { - NODE *node = (NODE *) palloc(sizeof(NODE)); + NODE *node = palloc_object(NODE); /* since this function recurses, it could be driven to stack overflow. */ check_stack_depth(); diff --git a/src/backend/utils/adt/tsquery_gist.c b/src/backend/utils/adt/tsquery_gist.c index f7f94c1c76..55fc93ebef 100644 --- a/src/backend/utils/adt/tsquery_gist.c +++ b/src/backend/utils/adt/tsquery_gist.c @@ -33,7 +33,7 @@ gtsquery_compress(PG_FUNCTION_ARGS) { TSQuerySign sign; - retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); + retval = palloc_object(GISTENTRY); sign = makeTSQuerySign(DatumGetTSQuery(entry->key)); gistentryinit(*retval, TSQuerySignGetDatum(sign), @@ -213,7 +213,7 @@ gtsquery_picksplit(PG_FUNCTION_ARGS) datum_r = GETENTRY(entryvec, seed_2); maxoff = OffsetNumberNext(maxoff); - costvector = (SPLITCOST *) palloc(sizeof(SPLITCOST) * maxoff); + costvector = palloc_array(SPLITCOST, maxoff); for (j = FirstOffsetNumber; j <= maxoff; j = OffsetNumberNext(j)) { costvector[j - 1].pos = j; diff --git a/src/backend/utils/adt/tsquery_op.c b/src/backend/utils/adt/tsquery_op.c index bb77e92306..84bf070dff 100644 --- a/src/backend/utils/adt/tsquery_op.c +++ b/src/backend/utils/adt/tsquery_op.c @@ -32,17 +32,17 @@ tsquery_numnode(PG_FUNCTION_ARGS) static QTNode * join_tsqueries(TSQuery a, TSQuery b, int8 operator, uint16 distance) { - QTNode *res = (QTNode *) palloc0(sizeof(QTNode)); + QTNode *res = palloc0_object(QTNode); res->flags |= QTN_NEEDFREE; - res->valnode = (QueryItem *) palloc0(sizeof(QueryItem)); + res->valnode = palloc0_object(QueryItem); res->valnode->type = QI_OPR; res->valnode->qoperator.oper = operator; if (operator == OP_PHRASE) res->valnode->qoperator.distance = distance; - res->child = (QTNode **) palloc0(sizeof(QTNode *) * 2); + res->child = palloc0_array(QTNode *, 2); res->child[0] = QT2QTN(GETQUERY(b), GETOPERAND(b)); res->child[1] = QT2QTN(GETQUERY(a), GETOPERAND(a)); res->nchild = 2; @@ -165,15 +165,15 @@ tsquery_not(PG_FUNCTION_ARGS) if (a->size == 0) PG_RETURN_POINTER(a); - res = (QTNode *) palloc0(sizeof(QTNode)); + res = palloc0_object(QTNode); res->flags |= QTN_NEEDFREE; - res->valnode = (QueryItem *) palloc0(sizeof(QueryItem)); + res->valnode = palloc0_object(QueryItem); res->valnode->type = QI_OPR; res->valnode->qoperator.oper = OP_NOT; - res->child = (QTNode **) palloc0(sizeof(QTNode *)); + res->child = palloc0_object(QTNode *); res->child[0] = QT2QTN(GETQUERY(a), GETOPERAND(a)); res->nchild = 1; @@ -272,7 +272,7 @@ collectTSQueryValues(TSQuery a, int *nvalues_p) int nvalues = 0; int i; - values = (char **) palloc(sizeof(char *) * a->size); + values = palloc_array(char *, a->size); for (i = 0; i < a->size; i++) { diff --git a/src/backend/utils/adt/tsquery_util.c b/src/backend/utils/adt/tsquery_util.c index 1c24b041aa..2ccfc9d330 100644 --- a/src/backend/utils/adt/tsquery_util.c +++ b/src/backend/utils/adt/tsquery_util.c @@ -24,7 +24,7 @@ QTNode * QT2QTN(QueryItem *in, char *operand) { - QTNode *node = (QTNode *) palloc0(sizeof(QTNode)); + QTNode *node = palloc0_object(QTNode); /* since this function recurses, it could be driven to stack overflow. */ check_stack_depth(); @@ -33,7 +33,7 @@ QT2QTN(QueryItem *in, char *operand) if (in->type == QI_OPR) { - node->child = (QTNode **) palloc0(sizeof(QTNode *) * 2); + node->child = palloc0_array(QTNode *, 2); node->child[0] = QT2QTN(in + 1, operand); node->sign = node->child[0]->sign; if (in->qoperator.oper == OP_NOT) @@ -226,7 +226,7 @@ QTNTernary(QTNode *in) int oldnchild = in->nchild; in->nchild += cc->nchild - 1; - in->child = (QTNode **) repalloc(in->child, in->nchild * sizeof(QTNode *)); + in->child = repalloc_array(in->child, QTNode *, in->nchild); if (i + 1 != oldnchild) memmove(in->child + i + cc->nchild, in->child + i + 1, @@ -262,10 +262,10 @@ QTNBinary(QTNode *in) while (in->nchild > 2) { - QTNode *nn = (QTNode *) palloc0(sizeof(QTNode)); + QTNode *nn = palloc0_object(QTNode); - nn->valnode = (QueryItem *) palloc0(sizeof(QueryItem)); - nn->child = (QTNode **) palloc0(sizeof(QTNode *) * 2); + nn->valnode = palloc0_object(QueryItem); + nn->child = palloc0_array(QTNode *, 2); nn->nchild = 2; nn->flags = QTN_NEEDFREE; @@ -400,10 +400,10 @@ QTNCopy(QTNode *in) /* since this function recurses, it could be driven to stack overflow. */ check_stack_depth(); - out = (QTNode *) palloc(sizeof(QTNode)); + out = palloc_object(QTNode); *out = *in; - out->valnode = (QueryItem *) palloc(sizeof(QueryItem)); + out->valnode = palloc_object(QueryItem); *(out->valnode) = *(in->valnode); out->flags |= QTN_NEEDFREE; @@ -418,7 +418,7 @@ QTNCopy(QTNode *in) { int i; - out->child = (QTNode **) palloc(sizeof(QTNode *) * in->nchild); + out->child = palloc_array(QTNode *, in->nchild); for (i = 0; i < in->nchild; i++) out->child[i] = QTNCopy(in->child[i]); diff --git a/src/backend/utils/adt/tsrank.c b/src/backend/utils/adt/tsrank.c index e863aa5865..4a34184864 100644 --- a/src/backend/utils/adt/tsrank.c +++ b/src/backend/utils/adt/tsrank.c @@ -160,7 +160,7 @@ SortAndUniqItems(TSQuery q, int *size) **ptr, **prevptr; - ptr = res = (QueryOperand **) palloc(sizeof(QueryOperand *) * *size); + ptr = res = palloc_array(QueryOperand *, *size); /* Collect all operands from the tree to res */ while ((*size)--) @@ -225,7 +225,7 @@ calc_rank_and(const float *w, TSVector t, TSQuery q) pfree(item); return calc_rank_or(w, t, q); } - pos = (WordEntryPosVector **) palloc0(sizeof(WordEntryPosVector *) * q->size); + pos = palloc0_array(WordEntryPosVector *, q->size); /* A dummy WordEntryPos array to use when haspos is false */ posnull.npos = 1; @@ -743,7 +743,7 @@ get_docrep(TSVector txt, QueryRepresentation *qr, int *doclen) cur = 0; DocRepresentation *doc; - doc = (DocRepresentation *) palloc(sizeof(DocRepresentation) * len); + doc = palloc_array(DocRepresentation, len); /* * Iterate through query to make DocRepresentation for words and it's @@ -815,7 +815,7 @@ get_docrep(TSVector txt, QueryRepresentation *qr, int *doclen) * Join QueryItem per WordEntry and its position */ storage.pos = doc->pos; - storage.data.query.items = palloc(sizeof(QueryItem *) * qr->query->size); + storage.data.query.items = palloc_array(QueryItem *, qr->query->size); storage.data.query.items[0] = doc->data.map.item; storage.data.query.nitem = 1; @@ -832,7 +832,7 @@ get_docrep(TSVector txt, QueryRepresentation *qr, int *doclen) *wptr = storage; wptr++; storage.pos = rptr->pos; - storage.data.query.items = palloc(sizeof(QueryItem *) * qr->query->size); + storage.data.query.items = palloc_array(QueryItem *, qr->query->size); storage.data.query.items[0] = rptr->data.map.item; storage.data.query.nitem = 1; } @@ -878,8 +878,7 @@ calc_rank_cd(const float4 *arrdata, TSVector txt, TSQuery query, int method) } qr.query = query; - qr.operandData = (QueryRepresentationOperand *) - palloc0(sizeof(QueryRepresentationOperand) * query->size); + qr.operandData = palloc0_array(QueryRepresentationOperand, query->size); doc = get_docrep(txt, &qr, &doclen); if (!doc) diff --git a/src/backend/utils/adt/tsvector.c b/src/backend/utils/adt/tsvector.c index f568f1fce9..d00c603208 100644 --- a/src/backend/utils/adt/tsvector.c +++ b/src/backend/utils/adt/tsvector.c @@ -202,8 +202,8 @@ tsvectorin(PG_FUNCTION_ARGS) state = init_tsvector_parser(buf, 0, escontext); arrlen = 64; - arr = (WordEntryIN *) palloc(sizeof(WordEntryIN) * arrlen); - cur = tmpbuf = (char *) palloc(buflen); + arr = palloc_array(WordEntryIN, arrlen); + cur = tmpbuf = palloc_array(char, buflen); while (gettoken_tsvector(state, &token, &toklen, &pos, &poslen, NULL)) { diff --git a/src/backend/utils/adt/tsvector_op.c b/src/backend/utils/adt/tsvector_op.c index c752cbe546..b809089ac5 100644 --- a/src/backend/utils/adt/tsvector_op.c +++ b/src/backend/utils/adt/tsvector_op.c @@ -1212,7 +1212,7 @@ checkclass_str(CHKVAL *chkval, WordEntry *entry, QueryOperand *val, /* * Filter position information by weights */ - dptr = data->pos = palloc(sizeof(WordEntryPos) * posvec->npos); + dptr = data->pos = palloc_array(WordEntryPos, posvec->npos); data->allocated = true; /* Is there a position with a matching weight? */ @@ -1391,12 +1391,12 @@ checkcondition_str(void *checkval, QueryOperand *val, ExecPhraseData *data) if (totalpos == 0) { totalpos = 256; - allpos = palloc(sizeof(WordEntryPos) * totalpos); + allpos = palloc_array(WordEntryPos, totalpos); } else { totalpos *= 2; - allpos = repalloc(allpos, sizeof(WordEntryPos) * totalpos); + allpos = repalloc_array(allpos, WordEntryPos, totalpos); } } @@ -2456,7 +2456,7 @@ ts_setup_firstcall(FunctionCallInfo fcinfo, FuncCallContext *funcctx, oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx); - stat->stack = palloc0(sizeof(StatEntry *) * (stat->maxdepth + 1)); + stat->stack = palloc0_array(StatEntry *, stat->maxdepth + 1); stat->stackpos = 0; node = stat->root; @@ -2839,7 +2839,7 @@ tsvector_update_trigger(PG_FUNCTION_ARGS, bool config_column) prs.lenwords = 32; prs.curwords = 0; prs.pos = 0; - prs.words = (ParsedWord *) palloc(sizeof(ParsedWord) * prs.lenwords); + prs.words = palloc_array(ParsedWord, prs.lenwords); /* find all words in indexable column(s) */ for (i = 2; i < trigger->tgnargs; i++) diff --git a/src/backend/utils/adt/tsvector_parser.c b/src/backend/utils/adt/tsvector_parser.c index e1620d3ed1..a1c374a04a 100644 --- a/src/backend/utils/adt/tsvector_parser.c +++ b/src/backend/utils/adt/tsvector_parser.c @@ -58,7 +58,7 @@ init_tsvector_parser(char *input, int flags, Node *escontext) { TSVectorParseState state; - state = (TSVectorParseState) palloc(sizeof(struct TSVectorParseStateData)); + state = palloc_object(struct TSVectorParseStateData); state->prsbuf = input; state->bufstart = input; state->len = 32; @@ -322,13 +322,13 @@ gettoken_tsvector(TSVectorParseState state, if (posalen == 0) { posalen = 4; - pos = (WordEntryPos *) palloc(sizeof(WordEntryPos) * posalen); + pos = palloc_array(WordEntryPos, posalen); npos = 0; } else if (npos + 1 >= posalen) { posalen *= 2; - pos = (WordEntryPos *) repalloc(pos, sizeof(WordEntryPos) * posalen); + pos = repalloc_array(pos, WordEntryPos, posalen); } npos++; WEP_SETPOS(pos[npos - 1], LIMITPOS(atoi(state->prsbuf))); diff --git a/src/backend/utils/adt/uuid.c b/src/backend/utils/adt/uuid.c index 5df35d7cac..2bc915edc2 100644 --- a/src/backend/utils/adt/uuid.c +++ b/src/backend/utils/adt/uuid.c @@ -80,7 +80,7 @@ uuid_in(PG_FUNCTION_ARGS) char *uuid_str = PG_GETARG_CSTRING(0); pg_uuid_t *uuid; - uuid = (pg_uuid_t *) palloc(sizeof(*uuid)); + uuid = palloc_object(pg_uuid_t); string_to_uuid(uuid_str, uuid, fcinfo->context); PG_RETURN_UUID_P(uuid); } @@ -288,7 +288,7 @@ uuid_sortsupport(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(ssup->ssup_cxt); - uss = palloc(sizeof(uuid_sortsupport_state)); + uss = palloc_object(uuid_sortsupport_state); uss->input_count = 0; uss->estimating = true; initHyperLogLog(&uss->abbr_card, 10); diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index f202b8df4e..baa5b44ea8 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -1703,7 +1703,7 @@ varstr_sortsupport(SortSupport ssup, Oid typid, Oid collid) */ if (abbreviate || !collate_c) { - sss = palloc(sizeof(VarStringSortSupport)); + sss = palloc_object(VarStringSortSupport); sss->buf1 = palloc(TEXTBUFLEN); sss->buflen1 = TEXTBUFLEN; sss->buf2 = palloc(TEXTBUFLEN); diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index 41e775570e..c8ab9d61c6 100644 --- a/src/backend/utils/adt/xml.c +++ b/src/backend/utils/adt/xml.c @@ -1255,7 +1255,7 @@ pg_xml_init(PgXmlStrictness strictness) pg_xml_init_library(); /* Create error handling context structure */ - errcxt = (PgXmlErrorContext *) palloc(sizeof(PgXmlErrorContext)); + errcxt = palloc_object(PgXmlErrorContext); errcxt->magic = ERRCXT_MAGIC; errcxt->strictness = strictness; errcxt->err_occurred = false; @@ -4733,10 +4733,10 @@ XmlTableInitOpaque(TableFuncScanState *state, int natts) XmlTableBuilderData *xtCxt; PgXmlErrorContext *xmlerrcxt; - xtCxt = palloc0(sizeof(XmlTableBuilderData)); + xtCxt = palloc0_object(XmlTableBuilderData); xtCxt->magic = XMLTABLE_CONTEXT_MAGIC; xtCxt->natts = natts; - xtCxt->xpathscomp = palloc0(sizeof(xmlXPathCompExprPtr) * natts); + xtCxt->xpathscomp = palloc0_array(xmlXPathCompExprPtr, natts); xmlerrcxt = pg_xml_init(PG_XML_STRICTNESS_ALL); diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c index 02ae7d5a83..84f1f80607 100644 --- a/src/backend/utils/cache/catcache.c +++ b/src/backend/utils/cache/catcache.c @@ -920,7 +920,7 @@ InitCatCache(int id, */ if (CacheHdr == NULL) { - CacheHdr = (CatCacheHeader *) palloc(sizeof(CatCacheHeader)); + CacheHdr = palloc_object(CatCacheHeader); slist_init(&CacheHdr->ch_caches); CacheHdr->ch_ntup = 0; #ifdef CATCACHE_STATS @@ -2243,7 +2243,7 @@ CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp, Datum *arguments, { /* Set up keys for a negative cache entry */ oldcxt = MemoryContextSwitchTo(CacheMemoryContext); - ct = (CatCTup *) palloc(sizeof(CatCTup)); + ct = palloc_object(CatCTup); /* * Store keys - they'll point into separately allocated memory if not diff --git a/src/backend/utils/cache/evtcache.c b/src/backend/utils/cache/evtcache.c index 76ba2db539..7f8e246e80 100644 --- a/src/backend/utils/cache/evtcache.c +++ b/src/backend/utils/cache/evtcache.c @@ -172,7 +172,7 @@ BuildEventTriggerCache(void) oldcontext = MemoryContextSwitchTo(EventTriggerCacheContext); /* Allocate new cache item. */ - item = palloc0(sizeof(EventTriggerCacheItem)); + item = palloc0_object(EventTriggerCacheItem); item->fnoid = form->evtfoid; item->enabled = form->evtenabled; diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index 06f736cab4..868f8f6188 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -758,7 +758,7 @@ PrepareInplaceInvalidationState(void) Assert(inplaceInvalInfo == NULL); /* gone after WAL insertion CritSection ends, so use current context */ - myInfo = (InvalidationInfo *) palloc0(sizeof(InvalidationInfo)); + myInfo = palloc0_object(InvalidationInfo); /* Stash our messages past end of the transactional messages, if any. */ if (transInvalInfo != NULL) diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c index fa7cd7e06a..5aa7a26d95 100644 --- a/src/backend/utils/cache/lsyscache.c +++ b/src/backend/utils/cache/lsyscache.c @@ -702,8 +702,7 @@ get_op_index_interpretation(Oid opno) if (cmptype == COMPARE_INVALID) continue; - thisresult = (OpIndexInterpretation *) - palloc(sizeof(OpIndexInterpretation)); + thisresult = palloc_object(OpIndexInterpretation); thisresult->opfamily_id = op_form->amopfamily; thisresult->cmptype = cmptype; thisresult->oplefttype = op_form->amoplefttype; @@ -748,8 +747,7 @@ get_op_index_interpretation(Oid opno) continue; /* OK, report it as COMPARE_NE */ - thisresult = (OpIndexInterpretation *) - palloc(sizeof(OpIndexInterpretation)); + thisresult = palloc_object(OpIndexInterpretation); thisresult->opfamily_id = op_form->amopfamily; thisresult->cmptype = COMPARE_NE; thisresult->oplefttype = op_form->amoplefttype; diff --git a/src/backend/utils/cache/partcache.c b/src/backend/utils/cache/partcache.c index f5d7d70def..67e8844003 100644 --- a/src/backend/utils/cache/partcache.c +++ b/src/backend/utils/cache/partcache.c @@ -167,18 +167,18 @@ RelationBuildPartitionKey(Relation relation) /* Allocate assorted arrays in the partkeycxt, which we'll fill below */ oldcxt = MemoryContextSwitchTo(partkeycxt); - key->partattrs = (AttrNumber *) palloc0(key->partnatts * sizeof(AttrNumber)); - key->partopfamily = (Oid *) palloc0(key->partnatts * sizeof(Oid)); - key->partopcintype = (Oid *) palloc0(key->partnatts * sizeof(Oid)); - key->partsupfunc = (FmgrInfo *) palloc0(key->partnatts * sizeof(FmgrInfo)); - - key->partcollation = (Oid *) palloc0(key->partnatts * sizeof(Oid)); - key->parttypid = (Oid *) palloc0(key->partnatts * sizeof(Oid)); - key->parttypmod = (int32 *) palloc0(key->partnatts * sizeof(int32)); - key->parttyplen = (int16 *) palloc0(key->partnatts * sizeof(int16)); - key->parttypbyval = (bool *) palloc0(key->partnatts * sizeof(bool)); - key->parttypalign = (char *) palloc0(key->partnatts * sizeof(char)); - key->parttypcoll = (Oid *) palloc0(key->partnatts * sizeof(Oid)); + key->partattrs = palloc0_array(AttrNumber, key->partnatts); + key->partopfamily = palloc0_array(Oid, key->partnatts); + key->partopcintype = palloc0_array(Oid, key->partnatts); + key->partsupfunc = palloc0_array(FmgrInfo, key->partnatts); + + key->partcollation = palloc0_array(Oid, key->partnatts); + key->parttypid = palloc0_array(Oid, key->partnatts); + key->parttypmod = palloc0_array(int32, key->partnatts); + key->parttyplen = palloc0_array(int16, key->partnatts); + key->parttypbyval = palloc0_array(bool, key->partnatts); + key->parttypalign = palloc0_array(char, key->partnatts); + key->parttypcoll = palloc0_array(Oid, key->partnatts); MemoryContextSwitchTo(oldcxt); /* determine support function number to search for */ diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c index 6661d2c6b7..45261caaf4 100644 --- a/src/backend/utils/cache/plancache.c +++ b/src/backend/utils/cache/plancache.c @@ -207,7 +207,7 @@ CreateCachedPlan(RawStmt *raw_parse_tree, */ oldcxt = MemoryContextSwitchTo(source_context); - plansource = (CachedPlanSource *) palloc0(sizeof(CachedPlanSource)); + plansource = palloc0_object(CachedPlanSource); plansource->magic = CACHEDPLANSOURCE_MAGIC; plansource->raw_parse_tree = copyObject(raw_parse_tree); plansource->analyzed_parse_tree = NULL; @@ -307,7 +307,7 @@ CreateOneShotCachedPlan(RawStmt *raw_parse_tree, * Create and fill the CachedPlanSource struct within the caller's memory * context. Most fields are just left empty for the moment. */ - plansource = (CachedPlanSource *) palloc0(sizeof(CachedPlanSource)); + plansource = palloc0_object(CachedPlanSource); plansource->magic = CACHEDPLANSOURCE_MAGIC; plansource->raw_parse_tree = raw_parse_tree; plansource->analyzed_parse_tree = NULL; @@ -469,7 +469,7 @@ CompleteCachedPlan(CachedPlanSource *plansource, if (num_params > 0) { - plansource->param_types = (Oid *) palloc(num_params * sizeof(Oid)); + plansource->param_types = palloc_array(Oid, num_params); memcpy(plansource->param_types, param_types, num_params * sizeof(Oid)); } else @@ -1119,7 +1119,7 @@ BuildCachedPlan(CachedPlanSource *plansource, List *qlist, /* * Create and fill the CachedPlan struct within the new context. */ - plan = (CachedPlan *) palloc(sizeof(CachedPlan)); + plan = palloc_object(CachedPlan); plan->magic = CACHEDPLAN_MAGIC; plan->stmt_list = plist; @@ -1691,7 +1691,7 @@ CopyCachedPlan(CachedPlanSource *plansource) oldcxt = MemoryContextSwitchTo(source_context); - newsource = (CachedPlanSource *) palloc0(sizeof(CachedPlanSource)); + newsource = palloc0_object(CachedPlanSource); newsource->magic = CACHEDPLANSOURCE_MAGIC; newsource->raw_parse_tree = copyObject(plansource->raw_parse_tree); newsource->analyzed_parse_tree = copyObject(plansource->analyzed_parse_tree); @@ -1700,8 +1700,7 @@ CopyCachedPlan(CachedPlanSource *plansource) newsource->commandTag = plansource->commandTag; if (plansource->num_params > 0) { - newsource->param_types = (Oid *) - palloc(plansource->num_params * sizeof(Oid)); + newsource->param_types = palloc_array(Oid, plansource->num_params); memcpy(newsource->param_types, plansource->param_types, plansource->num_params * sizeof(Oid)); } @@ -1840,7 +1839,7 @@ GetCachedExpression(Node *expr) oldcxt = MemoryContextSwitchTo(cexpr_context); - cexpr = (CachedExpression *) palloc(sizeof(CachedExpression)); + cexpr = palloc_object(CachedExpression); cexpr->magic = CACHEDEXPR_MAGIC; cexpr->expr = copyObject(expr); cexpr->is_valid = true; diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 915d0bc908..a4dc1cbe5a 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -422,7 +422,7 @@ AllocateRelationDesc(Form_pg_class relp) /* * allocate and zero space for new relation descriptor */ - relation = (Relation) palloc0(sizeof(RelationData)); + relation = palloc0_object(RelationData); /* make sure relation is marked as having no open file yet */ relation->rd_smgr = NULL; @@ -1902,7 +1902,7 @@ formrdesc(const char *relationName, Oid relationReltype, /* * allocate new relation desc, clear all fields of reldesc */ - relation = (Relation) palloc0(sizeof(RelationData)); + relation = palloc0_object(RelationData); /* make sure relation is marked as having no open file yet */ relation->rd_smgr = NULL; @@ -1994,7 +1994,7 @@ formrdesc(const char *relationName, Oid relationReltype, /* mark not-null status */ if (has_not_null) { - TupleConstr *constr = (TupleConstr *) palloc0(sizeof(TupleConstr)); + TupleConstr *constr = palloc0_object(TupleConstr); constr->has_not_null = true; relation->rd_att->constr = constr; @@ -3579,7 +3579,7 @@ RelationBuildLocalRelation(const char *relname, /* * allocate a new relation descriptor and fill in basic state fields. */ - rel = (Relation) palloc0(sizeof(RelationData)); + rel = palloc0_object(RelationData); /* make sure relation is marked as having no open file yet */ rel->rd_smgr = NULL; @@ -3627,7 +3627,7 @@ RelationBuildLocalRelation(const char *relname, if (has_not_null) { - TupleConstr *constr = (TupleConstr *) palloc0(sizeof(TupleConstr)); + TupleConstr *constr = palloc0_object(TupleConstr); constr->has_not_null = true; rel->rd_att->constr = constr; @@ -5670,9 +5670,9 @@ RelationGetExclusionInfo(Relation indexRelation, indnkeyatts = IndexRelationGetNumberOfKeyAttributes(indexRelation); /* Allocate result space in caller context */ - *operators = ops = (Oid *) palloc(sizeof(Oid) * indnkeyatts); - *procs = funcs = (Oid *) palloc(sizeof(Oid) * indnkeyatts); - *strategies = strats = (uint16 *) palloc(sizeof(uint16) * indnkeyatts); + *operators = ops = palloc_array(Oid, indnkeyatts); + *procs = funcs = palloc_array(Oid, indnkeyatts); + *strategies = strats = palloc_array(uint16, indnkeyatts); /* Quick exit if we have the data cached already */ if (indexRelation->rd_exclstrats != NULL) @@ -5763,9 +5763,9 @@ RelationGetExclusionInfo(Relation indexRelation, /* Save a copy of the results in the relcache entry. */ oldcxt = MemoryContextSwitchTo(indexRelation->rd_indexcxt); - indexRelation->rd_exclops = (Oid *) palloc(sizeof(Oid) * indnkeyatts); - indexRelation->rd_exclprocs = (Oid *) palloc(sizeof(Oid) * indnkeyatts); - indexRelation->rd_exclstrats = (uint16 *) palloc(sizeof(uint16) * indnkeyatts); + indexRelation->rd_exclops = palloc_array(Oid, indnkeyatts); + indexRelation->rd_exclprocs = palloc_array(Oid, indnkeyatts); + indexRelation->rd_exclstrats = palloc_array(uint16, indnkeyatts); memcpy(indexRelation->rd_exclops, ops, sizeof(Oid) * indnkeyatts); memcpy(indexRelation->rd_exclprocs, funcs, sizeof(Oid) * indnkeyatts); memcpy(indexRelation->rd_exclstrats, strats, sizeof(uint16) * indnkeyatts); @@ -5959,7 +5959,7 @@ RelationBuildPublicationDesc(Relation relation, PublicationDesc *pubdesc) /* Now save copy of the descriptor in the relcache entry. */ oldcxt = MemoryContextSwitchTo(CacheMemoryContext); - relation->rd_pubdesc = palloc(sizeof(PublicationDesc)); + relation->rd_pubdesc = palloc_object(PublicationDesc); memcpy(relation->rd_pubdesc, pubdesc, sizeof(PublicationDesc)); MemoryContextSwitchTo(oldcxt); } @@ -5967,7 +5967,7 @@ RelationBuildPublicationDesc(Relation relation, PublicationDesc *pubdesc) static bytea ** CopyIndexAttOptions(bytea **srcopts, int natts) { - bytea **opts = palloc(sizeof(*opts) * natts); + bytea **opts = palloc_array(bytea *, natts); for (int i = 0; i < natts; i++) { @@ -5999,7 +5999,7 @@ RelationGetIndexAttOptions(Relation relation, bool copy) return copy ? CopyIndexAttOptions(opts, natts) : opts; /* Get and parse opclass options. */ - opts = palloc0(sizeof(*opts) * natts); + opts = palloc0_array(bytea *, natts); for (i = 0; i < natts; i++) { @@ -6292,7 +6292,7 @@ load_relcache_init_file(bool shared) /* mark not-null status */ if (has_not_null) { - TupleConstr *constr = (TupleConstr *) palloc0(sizeof(TupleConstr)); + TupleConstr *constr = palloc0_object(TupleConstr); constr->has_not_null = true; rel->rd_att->constr = constr; diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index 6a347698ed..0c17d99d02 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -2764,7 +2764,7 @@ load_enum_cache_data(TypeCacheEntry *tcache) * through. */ maxitems = 64; - items = (EnumItem *) palloc(sizeof(EnumItem) * maxitems); + items = palloc_array(EnumItem, maxitems); numitems = 0; /* Scan pg_enum for the members of the target enum type. */ diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 29643c5143..4c5a928320 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -1774,7 +1774,7 @@ CopyErrorData(void) Assert(CurrentMemoryContext != ErrorContext); /* Copy the struct itself */ - newedata = (ErrorData *) palloc(sizeof(ErrorData)); + newedata = palloc_object(ErrorData); memcpy(newedata, edata, sizeof(ErrorData)); /* diff --git a/src/backend/utils/fmgr/funcapi.c b/src/backend/utils/fmgr/funcapi.c index 5f2317211c..f40879f061 100644 --- a/src/backend/utils/fmgr/funcapi.c +++ b/src/backend/utils/fmgr/funcapi.c @@ -1436,7 +1436,7 @@ get_func_arg_info(HeapTuple procTup, &elems, NULL, &nelems); if (nelems != numargs) /* should not happen */ elog(ERROR, "proargnames must have the same number of elements as the function has arguments"); - *p_argnames = (char **) palloc(sizeof(char *) * numargs); + *p_argnames = palloc_array(char *, numargs); for (i = 0; i < numargs; i++) (*p_argnames)[i] = TextDatumGetCString(elems[i]); } diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 98f9598cd7..4ed69ac7ba 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -1260,7 +1260,7 @@ process_startup_options(Port *port, bool am_superuser) maxac = 2 + (strlen(port->cmdline_options) + 1) / 2; - av = (char **) palloc(maxac * sizeof(char *)); + av = palloc_array(char *, maxac); ac = 0; av[ac++] = "postgres"; diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c index fb629ed5c8..dbce0e6181 100644 --- a/src/backend/utils/mb/mbutils.c +++ b/src/backend/utils/mb/mbutils.c @@ -1792,7 +1792,7 @@ pgwin32_message_to_UTF16(const char *str, int len, int *utf16len) */ if (codepage != 0) { - utf16 = (WCHAR *) palloc(sizeof(WCHAR) * (len + 1)); + utf16 = palloc_array(WCHAR, len + 1); dstlen = MultiByteToWideChar(codepage, 0, str, len, utf16, len); utf16[dstlen] = (WCHAR) 0; } @@ -1816,7 +1816,7 @@ pgwin32_message_to_UTF16(const char *str, int len, int *utf16len) else utf8 = (char *) str; - utf16 = (WCHAR *) palloc(sizeof(WCHAR) * (len + 1)); + utf16 = palloc_array(WCHAR, len + 1); dstlen = MultiByteToWideChar(CP_UTF8, 0, utf8, len, utf16, len); utf16[dstlen] = (WCHAR) 0; diff --git a/src/backend/utils/misc/conffiles.c b/src/backend/utils/misc/conffiles.c index 23ebad4749..e702d1d8e3 100644 --- a/src/backend/utils/misc/conffiles.c +++ b/src/backend/utils/misc/conffiles.c @@ -108,7 +108,7 @@ GetConfFilesInDir(const char *includedir, const char *calling_file, * them prior to caller processing the contents. */ size_filenames = 32; - filenames = (char **) palloc(size_filenames * sizeof(char *)); + filenames = palloc_array(char *, size_filenames); *num_filenames = 0; while ((de = ReadDir(d, directory)) != NULL) diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l index 11a1e2a3f9..c3d0f599be 100644 --- a/src/backend/utils/misc/guc-file.l +++ b/src/backend/utils/misc/guc-file.l @@ -283,7 +283,7 @@ record_config_file_error(const char *errmsg, { ConfigVariable *item; - item = palloc(sizeof *item); + item = palloc_object(ConfigVariable); item->name = NULL; item->value = NULL; item->errmsg = pstrdup(errmsg); @@ -482,7 +482,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel, else { /* ordinary variable, append to list */ - item = palloc(sizeof *item); + item = palloc_object(ConfigVariable); item->name = opt_name; item->value = opt_value; item->errmsg = NULL; diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index d495ff1594..f7d63e04c0 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -844,7 +844,7 @@ get_guc_variables(int *num_vars) int i; *num_vars = hash_get_num_entries(guc_hashtab); - result = palloc(sizeof(struct config_generic *) * *num_vars); + result = palloc_array(struct config_generic *, *num_vars); /* Extract pointers from the hash table */ i = 0; @@ -5208,7 +5208,7 @@ get_explain_guc_options(int *num) * While only a fraction of all the GUC variables are marked GUC_EXPLAIN, * it doesn't seem worth dynamically resizing this array. */ - result = palloc(sizeof(struct config_generic *) * hash_get_num_entries(guc_hashtab)); + result = palloc_array(struct config_generic *, hash_get_num_entries(guc_hashtab)); /* We need only consider GUCs with source not PGC_S_DEFAULT */ dlist_foreach(iter, &guc_nondef_list) diff --git a/src/backend/utils/misc/injection_point.c b/src/backend/utils/misc/injection_point.c index d02618c7ff..54a9fe8e16 100644 --- a/src/backend/utils/misc/injection_point.c +++ b/src/backend/utils/misc/injection_point.c @@ -614,7 +614,7 @@ InjectionPointList(void) if (generation % 2 == 0) continue; - inj_point = (InjectionPointData *) palloc0(sizeof(InjectionPointData)); + inj_point = palloc0_object(InjectionPointData); inj_point->name = pstrdup(entry->name); inj_point->library = pstrdup(entry->library); inj_point->function = pstrdup(entry->function); diff --git a/src/backend/utils/misc/queryenvironment.c b/src/backend/utils/misc/queryenvironment.c index 7bc72dabe6..0698309003 100644 --- a/src/backend/utils/misc/queryenvironment.c +++ b/src/backend/utils/misc/queryenvironment.c @@ -38,7 +38,7 @@ struct QueryEnvironment QueryEnvironment * create_queryEnv(void) { - return (QueryEnvironment *) palloc0(sizeof(QueryEnvironment)); + return palloc0_object(QueryEnvironment); } EphemeralNamedRelationMetadata diff --git a/src/backend/utils/misc/tzparser.c b/src/backend/utils/misc/tzparser.c index 6aaf7395ba..d7e84bab98 100644 --- a/src/backend/utils/misc/tzparser.c +++ b/src/backend/utils/misc/tzparser.c @@ -466,7 +466,7 @@ load_tzoffsets(const char *filename) /* Initialize array at a reasonable size */ arraysize = 128; - array = (tzEntry *) palloc(arraysize * sizeof(tzEntry)); + array = palloc_array(tzEntry, arraysize); /* Parse the file(s) */ n = ParseTzFile(filename, 0, &array, &arraysize, 0); diff --git a/src/backend/utils/mmgr/dsa.c b/src/backend/utils/mmgr/dsa.c index 4b6bcffea2..6b37839e92 100644 --- a/src/backend/utils/mmgr/dsa.c +++ b/src/backend/utils/mmgr/dsa.c @@ -1330,7 +1330,7 @@ create_internal(void *place, size_t size, * area. Other backends will need to obtain their own dsa_area object by * attaching. */ - area = palloc(sizeof(dsa_area)); + area = palloc_object(dsa_area); area->control = control; area->resowner = CurrentResourceOwner; memset(area->segment_maps, 0, sizeof(dsa_segment_map) * DSA_MAX_SEGMENTS); @@ -1386,7 +1386,7 @@ attach_internal(void *place, dsm_segment *segment, dsa_handle handle) (DSA_SEGMENT_HEADER_MAGIC ^ handle ^ 0)); /* Build the backend-local area object. */ - area = palloc(sizeof(dsa_area)); + area = palloc_object(dsa_area); area->control = control; area->resowner = CurrentResourceOwner; memset(&area->segment_maps[0], 0, diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c index 452d89a8c0..42bf50221b 100644 --- a/src/backend/utils/sort/logtape.c +++ b/src/backend/utils/sort/logtape.c @@ -437,7 +437,7 @@ ltsGetPreallocBlock(LogicalTapeSet *lts, LogicalTape *lt) if (lt->prealloc == NULL) { lt->prealloc_size = TAPE_WRITE_PREALLOC_MIN; - lt->prealloc = (int64 *) palloc(sizeof(int64) * lt->prealloc_size); + lt->prealloc = palloc_array(int64, lt->prealloc_size); } else if (lt->prealloc_size < TAPE_WRITE_PREALLOC_MAX) { @@ -560,7 +560,7 @@ LogicalTapeSetCreate(bool preallocate, SharedFileSet *fileset, int worker) /* * Create top-level struct including per-tape LogicalTape structs. */ - lts = (LogicalTapeSet *) palloc(sizeof(LogicalTapeSet)); + lts = palloc_object(LogicalTapeSet); lts->nBlocksAllocated = 0L; lts->nBlocksWritten = 0L; lts->nHoleBlocks = 0L; @@ -700,7 +700,7 @@ ltsCreateTape(LogicalTapeSet *lts) /* * Create per-tape struct. Note we allocate the I/O buffer lazily. */ - lt = palloc(sizeof(LogicalTape)); + lt = palloc_object(LogicalTape); lt->tapeSet = lts; lt->writing = true; lt->frozen = false; diff --git a/src/backend/utils/sort/sharedtuplestore.c b/src/backend/utils/sort/sharedtuplestore.c index 1dedbaa29c..e77d857ff3 100644 --- a/src/backend/utils/sort/sharedtuplestore.c +++ b/src/backend/utils/sort/sharedtuplestore.c @@ -160,7 +160,7 @@ sts_initialize(SharedTuplestore *sts, int participants, sts->participants[i].writing = false; } - accessor = palloc0(sizeof(SharedTuplestoreAccessor)); + accessor = palloc0_object(SharedTuplestoreAccessor); accessor->participant = my_participant_number; accessor->sts = sts; accessor->fileset = fileset; @@ -182,7 +182,7 @@ sts_attach(SharedTuplestore *sts, Assert(my_participant_number < sts->nparticipants); - accessor = palloc0(sizeof(SharedTuplestoreAccessor)); + accessor = palloc0_object(SharedTuplestoreAccessor); accessor->participant = my_participant_number; accessor->sts = sts; accessor->fileset = fileset; diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index 5d4411dc33..c1fa7a9750 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -673,7 +673,7 @@ tuplesort_begin_common(int workMem, SortCoordinate coordinate, int sortopt) */ oldcontext = MemoryContextSwitchTo(maincontext); - state = (Tuplesortstate *) palloc0(sizeof(Tuplesortstate)); + state = palloc0_object(Tuplesortstate); if (trace_sort) pg_rusage_init(&state->ru_start); diff --git a/src/backend/utils/sort/tuplesortvariants.c b/src/backend/utils/sort/tuplesortvariants.c index 9751a7fc49..079a51c474 100644 --- a/src/backend/utils/sort/tuplesortvariants.c +++ b/src/backend/utils/sort/tuplesortvariants.c @@ -265,7 +265,7 @@ tuplesort_begin_cluster(TupleDesc tupDesc, Assert(indexRel->rd_rel->relam == BTREE_AM_OID); oldcontext = MemoryContextSwitchTo(base->maincontext); - arg = (TuplesortClusterArg *) palloc0(sizeof(TuplesortClusterArg)); + arg = palloc0_object(TuplesortClusterArg); if (trace_sort) elog(LOG, @@ -372,7 +372,7 @@ tuplesort_begin_index_btree(Relation heapRel, int i; oldcontext = MemoryContextSwitchTo(base->maincontext); - arg = (TuplesortIndexBTreeArg *) palloc(sizeof(TuplesortIndexBTreeArg)); + arg = palloc_object(TuplesortIndexBTreeArg); if (trace_sort) elog(LOG, @@ -453,7 +453,7 @@ tuplesort_begin_index_hash(Relation heapRel, TuplesortIndexHashArg *arg; oldcontext = MemoryContextSwitchTo(base->maincontext); - arg = (TuplesortIndexHashArg *) palloc(sizeof(TuplesortIndexHashArg)); + arg = palloc_object(TuplesortIndexHashArg); if (trace_sort) elog(LOG, @@ -502,7 +502,7 @@ tuplesort_begin_index_gist(Relation heapRel, int i; oldcontext = MemoryContextSwitchTo(base->maincontext); - arg = (TuplesortIndexBTreeArg *) palloc(sizeof(TuplesortIndexBTreeArg)); + arg = palloc_object(TuplesortIndexBTreeArg); if (trace_sort) elog(LOG, @@ -662,7 +662,7 @@ tuplesort_begin_datum(Oid datumType, Oid sortOperator, Oid sortCollation, bool typbyval; oldcontext = MemoryContextSwitchTo(base->maincontext); - arg = (TuplesortDatumArg *) palloc(sizeof(TuplesortDatumArg)); + arg = palloc_object(TuplesortDatumArg); if (trace_sort) elog(LOG, @@ -694,7 +694,7 @@ tuplesort_begin_datum(Oid datumType, Oid sortOperator, Oid sortCollation, base->tuples = !typbyval; /* Prepare SortSupport data */ - base->sortKeys = (SortSupport) palloc0(sizeof(SortSupportData)); + base->sortKeys = palloc0_object(SortSupportData); base->sortKeys->ssup_cxt = CurrentMemoryContext; base->sortKeys->ssup_collation = sortCollation; diff --git a/src/backend/utils/sort/tuplestore.c b/src/backend/utils/sort/tuplestore.c index c9aecab8d6..def945b045 100644 --- a/src/backend/utils/sort/tuplestore.c +++ b/src/backend/utils/sort/tuplestore.c @@ -257,7 +257,7 @@ tuplestore_begin_common(int eflags, bool interXact, int maxKBytes) { Tuplestorestate *state; - state = (Tuplestorestate *) palloc0(sizeof(Tuplestorestate)); + state = palloc0_object(Tuplestorestate); state->status = TSS_INMEM; state->eflags = eflags; diff --git a/src/backend/utils/time/snapmgr.c b/src/backend/utils/time/snapmgr.c index 24f73a49d2..40a2e90e07 100644 --- a/src/backend/utils/time/snapmgr.c +++ b/src/backend/utils/time/snapmgr.c @@ -1179,7 +1179,7 @@ ExportSnapshot(Snapshot snapshot) snapshot = CopySnapshot(snapshot); oldcxt = MemoryContextSwitchTo(TopTransactionContext); - esnap = (ExportedSnapshot *) palloc(sizeof(ExportedSnapshot)); + esnap = palloc_object(ExportedSnapshot); esnap->snapfile = pstrdup(path); esnap->snapshot = snapshot; exportedSnapshots = lappend(exportedSnapshots, esnap); -- 2.39.5