From fe5cd43c2f8ed5b08aa8bcf8da6e8a5a23c89307 Mon Sep 17 00:00:00 2001 From: Maxim Orlov Date: Thu, 24 Aug 2023 16:13:20 +0300 Subject: [PATCH v1 2/4] Make use of vectorized lists_free and lists_free_deep functions --- src/backend/catalog/namespace.c | 3 +-- src/backend/catalog/pg_inherits.c | 3 +-- src/backend/catalog/pg_publication.c | 3 +-- src/backend/commands/publicationcmds.c | 3 +-- src/backend/executor/nodeModifyTable.c | 4 ++-- src/backend/optimizer/path/costsize.c | 3 +-- src/backend/optimizer/path/joinpath.c | 12 ++++-------- src/backend/optimizer/plan/planner.c | 12 ++++-------- src/backend/optimizer/util/predtest.c | 3 +-- src/backend/partitioning/partbounds.c | 7 ++----- src/backend/partitioning/partprune.c | 3 +-- src/backend/replication/pgoutput/pgoutput.c | 4 +--- src/backend/utils/cache/relcache.c | 9 +++------ src/backend/utils/misc/guc.c | 3 +-- 14 files changed, 24 insertions(+), 48 deletions(-) diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index 4ceae038ec..4c2dfb1cd1 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -3794,8 +3794,7 @@ recomputeNamespacePath(void) /* Clean up. */ pfree(rawname); - list_free(namelist); - list_free(oidlist); + lists_free(namelist, oidlist); } /* diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c index da969bd2f9..c0929e69d8 100644 --- a/src/backend/catalog/pg_inherits.c +++ b/src/backend/catalog/pg_inherits.c @@ -496,8 +496,7 @@ typeInheritsFrom(Oid subclassTypeId, Oid superclassTypeId) /* clean up ... */ table_close(inhrel, AccessShareLock); - list_free(visited); - list_free(queue); + lists_free(visited, queue); return result; } diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index c488b6370b..81075a86b3 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -349,8 +349,7 @@ GetTopMostAncestorInPublication(Oid puboid, List *ancestors, int *ancestor_level } } - list_free(apubids); - list_free(aschemaPubids); + lists_free(apubids, aschemaPubids); } return topmost_relid; diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index f4ba572697..e4fe6cc72a 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -1693,8 +1693,7 @@ OpenTableList(List *tables) } } - list_free(relids); - list_free(relids_with_rf); + lists_free(relids, relids_with_rf); return rels; } diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 5005d8c0d1..ebfcfc9ce2 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -1293,8 +1293,8 @@ ExecPendingInserts(EState *estate) estate, mtstate->canSetTag); } - list_free(estate->es_insert_pending_result_relations); - list_free(estate->es_insert_pending_modifytables); + lists_free(estate->es_insert_pending_result_relations, + estate->es_insert_pending_modifytables); estate->es_insert_pending_result_relations = NIL; estate->es_insert_pending_modifytables = NIL; } diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index d6ceafd51c..c5de63bc4c 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -5461,8 +5461,7 @@ calc_joinrel_size_estimate(PlannerInfo *root, sjinfo); /* Avoid leaking a lot of ListCells */ - list_free(joinquals); - list_free(pushedquals); + lists_free(joinquals, pushedquals); } else { diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c index 821d282497..f9fd89e734 100644 --- a/src/backend/optimizer/path/joinpath.c +++ b/src/backend/optimizer/path/joinpath.c @@ -465,8 +465,7 @@ paraminfo_get_equal_hashops(PlannerInfo *root, ParamPathInfo *param_info, if (!IsA(opexpr, OpExpr) || list_length(opexpr->args) != 2 || !clause_sides_match_join(rinfo, outerrel, innerrel)) { - list_free(*operators); - list_free(*param_exprs); + lists_free(*operators, *param_exprs); return false; } @@ -484,8 +483,7 @@ paraminfo_get_equal_hashops(PlannerInfo *root, ParamPathInfo *param_info, /* can't do memoize if we can't hash the outer type */ if (!OidIsValid(hasheqoperator)) { - list_free(*operators); - list_free(*param_exprs); + lists_free(*operators, *param_exprs); return false; } @@ -517,8 +515,7 @@ paraminfo_get_equal_hashops(PlannerInfo *root, ParamPathInfo *param_info, /* Reject if there are any volatile functions in lateral vars */ if (contain_volatile_functions(expr)) { - list_free(*operators); - list_free(*param_exprs); + lists_free(*operators, *param_exprs); return false; } @@ -528,8 +525,7 @@ paraminfo_get_equal_hashops(PlannerInfo *root, ParamPathInfo *param_info, /* can't use memoize without a valid hash proc and equals operator */ if (!OidIsValid(typentry->hash_proc) || !OidIsValid(typentry->eq_opr)) { - list_free(*operators); - list_free(*param_exprs); + lists_free(*operators, *param_exprs); return false; } diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 44efb1f4eb..165fd9241b 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -5413,8 +5413,7 @@ make_group_input_target(PlannerInfo *root, PathTarget *final_target) add_new_columns_to_pathtarget(input_target, non_group_vars); /* clean up cruft */ - list_free(non_group_vars); - list_free(non_group_cols); + lists_free(non_group_vars, non_group_cols); /* XXX this causes some redundant cost calculation ... */ return set_pathtarget_cost_width(root, input_target); @@ -5526,8 +5525,7 @@ make_partial_grouping_target(PlannerInfo *root, } /* clean up cruft */ - list_free(non_group_exprs); - list_free(non_group_cols); + lists_free(non_group_exprs, non_group_cols); /* XXX this causes some redundant cost calculation ... */ return set_pathtarget_cost_width(root, partial_target); @@ -6009,8 +6007,7 @@ make_window_input_target(PlannerInfo *root, add_new_columns_to_pathtarget(input_target, flattenable_vars); /* clean up cruft */ - list_free(flattenable_vars); - list_free(flattenable_cols); + lists_free(flattenable_vars, flattenable_cols); /* XXX this causes some redundant cost calculation ... */ return set_pathtarget_cost_width(root, input_target); @@ -6309,8 +6306,7 @@ make_sort_input_target(PlannerInfo *root, add_new_columns_to_pathtarget(input_target, postponable_vars); /* clean up cruft */ - list_free(postponable_vars); - list_free(postponable_cols); + lists_free(postponable_vars, postponable_cols); /* XXX this represents even more redundant cost calculation ... */ return set_pathtarget_cost_width(root, input_target); diff --git a/src/backend/optimizer/util/predtest.c b/src/backend/optimizer/util/predtest.c index 237c883874..1ca1f45e2e 100644 --- a/src/backend/optimizer/util/predtest.c +++ b/src/backend/optimizer/util/predtest.c @@ -2166,8 +2166,7 @@ lookup_proof_cache(Oid pred_op, Oid clause_op, bool refute_it) break; } - list_free_deep(pred_op_infos); - list_free_deep(clause_op_infos); + lists_free_deep(pred_op_infos, clause_op_infos); if (!found) { diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 5436cc302d..66b8479075 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -1477,8 +1477,7 @@ merge_list_bounds(FmgrInfo *partsupfunc, Oid *partcollation, cleanup: /* Free local memory before returning. */ - list_free(merged_datums); - list_free(merged_indexes); + lists_free(merged_datums, merged_indexes); free_partition_map(&outer_map); free_partition_map(&inner_map); @@ -1795,9 +1794,7 @@ merge_range_bounds(int partnatts, FmgrInfo *partsupfuncs, cleanup: /* Free local memory before returning. */ - list_free(merged_datums); - list_free(merged_kinds); - list_free(merged_indexes); + lists_free(merged_datums, merged_kinds, merged_indexes); free_partition_map(&outer_map); free_partition_map(&inner_map); diff --git a/src/backend/partitioning/partprune.c b/src/backend/partitioning/partprune.c index 7179b22a05..9a95986ad6 100644 --- a/src/backend/partitioning/partprune.c +++ b/src/backend/partitioning/partprune.c @@ -2501,8 +2501,7 @@ get_steps_using_prefix_recurse(GeneratePruningStepsContext *context, step_cmpfns1); result = list_concat(result, moresteps); - list_free(step_exprs1); - list_free(step_cmpfns1); + lists_free(step_exprs1, step_cmpfns1); } } else diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index b08ca55041..1596cd163b 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -2198,9 +2198,7 @@ get_rel_sync_entry(PGOutputData *data, Relation relation) pgoutput_column_list_init(data, rel_publications, entry); } - list_free(pubids); - list_free(schemaPubids); - list_free(rel_publications); + lists_free(pubids, schemaPubids, rel_publications); entry->replicate_valid = true; } diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 8e08ca1c68..1f813e5946 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -2439,8 +2439,7 @@ RelationDestroyRelation(Relation relation, bool remember_tupdesc) } FreeTriggerDesc(relation->trigdesc); list_free_deep(relation->rd_fkeylist); - list_free(relation->rd_indexlist); - list_free(relation->rd_statlist); + lists_free(relation->rd_indexlist, relation->rd_statlist); bms_free(relation->rd_keyattr); bms_free(relation->rd_pkattr); bms_free(relation->rd_idattr); @@ -5365,14 +5364,12 @@ restart: relreplindex == relation->rd_replidindex) { /* Still the same index set, so proceed */ - list_free(newindexoidlist); - list_free(indexoidlist); + lists_free(newindexoidlist, indexoidlist); } else { /* Gotta do it over ... might as well not leak memory */ - list_free(newindexoidlist); - list_free(indexoidlist); + lists_free(newindexoidlist, indexoidlist); bms_free(uindexattrs); bms_free(pkindexattrs); bms_free(idindexattrs); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 84e7ad4d90..c474fe74c0 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -6299,8 +6299,7 @@ ProcessGUCArray(ArrayType *array, pfree(value); } - list_free(gucNames); - list_free(gucValues); + lists_free(gucNames, gucValues); } -- 2.41.0