+++ /dev/null
-From 1ae2fb5d374096ada124d00a6e58feab1a468567 Mon Sep 17 00:00:00 2001
-From: Tatsuo Ishii <ishii@postgresql.org>
-Date: Sun, 31 Aug 2025 15:49:15 +0900
-Subject: [PATCH v2] Allow to compile against gcc 15 (C23).
-
-This commit includes multiple fixes to compile Pgpool-II in Fedora 42,
-which uses gcc 15 (C23).
-
-- Modify pool_type.h. "bool" is now standard in C99 and
- above. PostgreSQL decided to require C99 to compile it. So we follow
- the way, which is just including <stdbool.h>. Also we define
- TRUE/FALSE to (bool) 1 and (bool) 0 respectively. They are used only
- in Windows build in PostgreSQL but we still use them in some
- places. Eventually we should replace it with true/false since we do
- not support Windows.
-
-- It is now required that function pointer arguments matches the
- function prototype to be called. For example:
- static pid_t worker_fork_a_child(ProcessType type, void (*func) (), void *params);
- should be:
- static pid_t worker_fork_a_child(ProcessType type, void (*func) (void *), void *params);
-
- Also the prototype of pool_create_relcache() is changed,
-
-- raw_expression_tree_walker() calls walker() in many places. Now
- callers of walker() should cast the first argument of it using (Node
- *). We replace the call:
- return walker(((RangeVar *) node)->alias, context);
- with:
- return WALK(((RangeVar *) node)->alias, context);
- where WALK is defined as:
- #define WALK(n,c) walker((Node *) (n), c)
-
-- Note: we have lots of warnings regarding OpenSSL while compiling
- Pgpool-II in Fedora42. The version used in Fedora42:
-
- $ openssl -version
- OpenSSL 3.2.4 11 Feb 2025 (Library: OpenSSL 3.2.4 11 Feb 2025)
-
- The fix is not included in this commit. We need
- to look into it in the future.
-
-Discussion: https://github.com/pgpool/pgpool2/issues/124
----
- src/include/main/health_check.h | 4 +-
- src/include/pool.h | 2 +-
- src/include/pool_type.h | 42 ++--
- src/include/utils/pool_relcache.h | 10 +-
- src/include/utils/pool_select_walker.h | 7 +-
- src/main/health_check.c | 37 +--
- src/main/pgpool_main.c | 4 +-
- src/rewrite/pool_timestamp.c | 222 +++++++++---------
- src/streaming_replication/pool_worker_child.c | 2 +-
- .../010.rewrite_timestamp/timestamp/main.c | 4 +-
- src/utils/pool_relcache.c | 4 +-
- 11 files changed, 173 insertions(+), 165 deletions(-)
-
-diff --git a/src/include/main/health_check.h b/src/include/main/health_check.h
-index ad26f2f0a..f7736a38b 100644
---- a/src/include/main/health_check.h
-+++ b/src/include/main/health_check.h
-@@ -3,7 +3,7 @@
- * pgpool: a language independent connection pool server for PostgreSQL
- * written by Tatsuo Ishii
- *
-- * Copyright (c) 2003-2020 PgPool Global Development Group
-+ * Copyright (c) 2003-2025 PgPool Global Development Group
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby
-@@ -43,7 +43,7 @@ typedef struct {
-
- extern volatile POOL_HEALTH_CHECK_STATISTICS *health_check_stats; /* health check stats area in shared memory */
-
--extern void do_health_check_child(int *node_id);
-+extern void do_health_check_child(void *params);
- extern size_t health_check_stats_shared_memory_size(void);
- extern void health_check_stats_init(POOL_HEALTH_CHECK_STATISTICS *addr);
-
-diff --git a/src/include/pool.h b/src/include/pool.h
-index 95570c08e..576bb1d57 100644
---- a/src/include/pool.h
-+++ b/src/include/pool.h
-@@ -650,7 +650,7 @@ extern size_t strlcpy(char *dst, const char *src, size_t siz);
- #endif
-
- /* pool_worker_child.c */
--extern void do_worker_child(void);
-+extern void do_worker_child(void *params);
- extern int get_query_result(POOL_CONNECTION_POOL_SLOT * *slots, int backend_id, char *query, POOL_SELECT_RESULT * *res);
-
- #endif /* POOL_H */
-diff --git a/src/include/pool_type.h b/src/include/pool_type.h
-index 43f29a595..a2d4948f2 100644
---- a/src/include/pool_type.h
-+++ b/src/include/pool_type.h
-@@ -31,32 +31,34 @@
- #include <sys/socket.h>
- #include <stddef.h>
- #include "libpq-fe.h"
--/* Define common boolean type. C++ and BEOS already has it so exclude them. */
--#ifdef c_plusplus
--#ifndef __cplusplus
--#define __cplusplus
--#endif /* __cplusplus */
--#endif /* c_plusplus */
--
--#ifndef __BEOS__
--#ifndef __cplusplus
--#ifndef bool
--typedef char bool;
--#endif
--#ifndef true
--#define true ((bool) 1)
--#endif
-+
-+/* ----------------------------------------------------------------
-+ * Section 2: bool, true, false
-+ * ----------------------------------------------------------------
-+ */
-+
-+/*
-+ * bool
-+ * Boolean value, either true or false.
-+ *
-+ * PostgreSQL currently cannot deal with bool of size other than 1; there are
-+ * static assertions around the code to prevent that.
-+ */
-+
-+#include <stdbool.h>
-+
-+/*
-+ * Pgpool-II still uses TRUE/FALSE, that are only used Windows build in
-+ * PostgreSQL. In the feature, we should replace TRUE/FALSE with true/false,
-+ * but until that day...
-+ */
-+
- #ifndef TRUE
- #define TRUE ((bool) 1)
- #endif
--#ifndef false
--#define false ((bool) 0)
--#endif
- #ifndef FALSE
- #define FALSE ((bool) 0)
- #endif
--#endif /* not C++ */
--#endif /* __BEOS__ */
-
- /* ----------------------------------------------------------------
- * Section 5: offsetof, lengthof, endof, alignment
-diff --git a/src/include/utils/pool_relcache.h b/src/include/utils/pool_relcache.h
-index 70b7d3143..bffdc8777 100644
---- a/src/include/utils/pool_relcache.h
-+++ b/src/include/utils/pool_relcache.h
-@@ -6,7 +6,7 @@
- * pgpool: a language independent connection pool server for PostgreSQL
- * written by Tatsuo Ishii
- *
-- * Copyright (c) 2003-2010 PgPool Global Development Group
-+ * Copyright (c) 2003-2025 PgPool Global Development Group
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby
-@@ -34,8 +34,6 @@
-
- /* Relation lookup cache structure */
-
--typedef void *(*func_ptr) ();
--
- typedef struct
- {
- char dbname[MAX_ITEM_LENGTH]; /* database name */
-@@ -57,13 +55,13 @@ typedef struct
- * POOL_SELECT_RESULT *. This function must return a pointer to be saved
- * in cache->data.
- */
-- func_ptr register_func;
-+ void *(*register_func) (POOL_SELECT_RESULT *data);
-
- /*
- * User defined function to be called at data unregister. Argument
- * cache->data.
- */
-- func_ptr unregister_func;
-+ void *(*unregister_func) (void *data);
- bool cache_is_session_local; /* True if cache life time is session
- * local */
- bool no_cache_if_zero; /* if register func returns 0, do not
-@@ -72,7 +70,7 @@ typedef struct
- } POOL_RELCACHE;
-
- extern POOL_RELCACHE * pool_create_relcache(int cachesize, char *sql,
-- func_ptr register_func, func_ptr unregister_func,
-+ void *(*register_func) (POOL_SELECT_RESULT *), void *(*unregister_func) (void *),
- bool issessionlocal);
- extern void pool_discard_relcache(POOL_RELCACHE * relcache);
- extern void *pool_search_relcache(POOL_RELCACHE * relcache, POOL_CONNECTION_POOL * backend, char *table);
-diff --git a/src/include/utils/pool_select_walker.h b/src/include/utils/pool_select_walker.h
-index 0ae7ffe7c..3f5c6e7d9 100644
---- a/src/include/utils/pool_select_walker.h
-+++ b/src/include/utils/pool_select_walker.h
-@@ -6,7 +6,7 @@
- * pgpool: a language independent connection pool server for PostgreSQL
- * written by Tatsuo Ishii
- *
-- * Copyright (c) 2003-2024 PgPool Global Development Group
-+ * Copyright (c) 2003-2025 PgPool Global Development Group
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby
-@@ -54,6 +54,9 @@ typedef struct
- char table_names[POOL_MAX_SELECT_OIDS][NAMEDATALEN]; /* table names */
- } SelectContext;
-
-+
-+typedef bool (*tree_walker_callback) (Node *node, void *context);
-+
- extern int pool_get_terminate_backend_pid(Node *node);
- extern bool pool_has_function_call(Node *node);
- extern bool pool_has_non_immutable_function_call(Node *node);
-@@ -66,7 +69,7 @@ extern bool pool_has_row_security(Node *node);
- extern bool pool_has_insertinto_or_locking_clause(Node *node);
- extern bool pool_has_pgpool_regclass(void);
- extern bool pool_has_to_regclass(void);
--extern bool raw_expression_tree_walker(Node *node, bool (*walker) (), void *context);
-+extern bool raw_expression_tree_walker(Node *node, tree_walker_callback walker, void *context);
- extern int pool_table_name_to_oid(char *table_name);
- extern int pool_extract_table_oids_from_select_stmt(Node *node, SelectContext * ctx);
- extern RangeVar *makeRangeVarFromNameList(List *names);
-diff --git a/src/main/health_check.c b/src/main/health_check.c
-index ae831dd6d..514fe2900 100644
---- a/src/main/health_check.c
-+++ b/src/main/health_check.c
-@@ -108,7 +108,7 @@ static bool check_backend_down_request(int node, bool done_requests);
- * health check child main loop
- */
- void
--do_health_check_child(int *node_id)
-+do_health_check_child(void *params)
- {
- sigjmp_buf local_sigjmp_buf;
- MemoryContext HealthCheckMemoryContext;
-@@ -116,19 +116,22 @@ do_health_check_child(int *node_id)
- static struct timeval start_time;
- static struct timeval end_time;
- long diff_t;
-+ int node_id;
-
- POOL_HEALTH_CHECK_STATISTICS mystat;
-- stats = &health_check_stats[*node_id];
-+
-+ node_id = *((int *) params);
-+ stats = &health_check_stats[node_id];
-
- /* Set application name */
-- set_application_name_with_suffix(PT_HEALTH_CHECK, *node_id);
-+ set_application_name_with_suffix(PT_HEALTH_CHECK, node_id);
-
- ereport(DEBUG1,
-- (errmsg("I am health check process pid:%d DB node id:%d", getpid(), *node_id)));
-+ (errmsg("I am health check process pid:%d DB node id:%d", getpid(), node_id)));
-
- /* Identify myself via ps */
- init_ps_display("", "", "", "");
-- snprintf(psbuffer, sizeof(psbuffer), "health check process(%d)", *node_id);
-+ snprintf(psbuffer, sizeof(psbuffer), "health check process(%d)", node_id);
- set_ps_display(psbuffer, false);
-
- /* set up signal handlers */
-@@ -190,7 +193,7 @@ do_health_check_child(int *node_id)
-
- CHECK_REQUEST;
-
-- if (pool_config->health_check_params[*node_id].health_check_period <= 0)
-+ if (pool_config->health_check_params[node_id].health_check_period <= 0)
- {
- stats->min_health_check_duration = 0;
- sleep(30);
-@@ -200,27 +203,27 @@ do_health_check_child(int *node_id)
- * If health checking is enabled and the node is not in down status,
- * do health check.
- */
-- else if (pool_config->health_check_params[*node_id].health_check_period > 0)
-+ else if (pool_config->health_check_params[node_id].health_check_period > 0)
- {
- bool result;
-- BackendInfo *bkinfo = pool_get_node_info(*node_id);
-+ BackendInfo *bkinfo = pool_get_node_info(node_id);
-
- stats->total_count++;
- gettimeofday(&start_time, NULL);
-
- stats->last_health_check = time(NULL);
-
-- result = establish_persistent_connection(*node_id);
-+ result = establish_persistent_connection(node_id);
-
- if (result && slot == NULL)
- {
- stats->last_failed_health_check = time(NULL);
-
-- if (POOL_DISALLOW_TO_FAILOVER(BACKEND_INFO(*node_id).flag))
-+ if (POOL_DISALLOW_TO_FAILOVER(BACKEND_INFO(node_id).flag))
- {
- ereport(LOG,
- (errmsg("health check failed on node %d but failover is disallowed for the node",
-- *node_id)));
-+ node_id)));
- }
- else
- {
-@@ -229,19 +232,19 @@ do_health_check_child(int *node_id)
- stats->fail_count++;
-
- ereport(LOG, (errmsg("health check failed on node %d (timeout:%d)",
-- *node_id, health_check_timer_expired)));
-+ node_id, health_check_timer_expired)));
-
- if (bkinfo->backend_status == CON_DOWN && bkinfo->quarantine == true)
- {
- ereport(LOG, (errmsg("health check failed on quarantine node %d (timeout:%d)",
-- *node_id, health_check_timer_expired),
-+ node_id, health_check_timer_expired),
- errdetail("ignoring..")));
- }
- else
- {
- /* trigger failover */
- partial = health_check_timer_expired ? false : true;
-- degenerate_backend_set(node_id, 1, partial ? REQ_DETAIL_SWITCHOVER : 0);
-+ degenerate_backend_set(&node_id, 1, partial ? REQ_DETAIL_SWITCHOVER : 0);
- }
- }
- }
-@@ -253,7 +256,7 @@ do_health_check_child(int *node_id)
- /* The node has become reachable again. Reset
- * the quarantine state
- */
-- send_failback_request(*node_id, false, REQ_DETAIL_UPDATE | REQ_DETAIL_WATCHDOG);
-+ send_failback_request(node_id, false, REQ_DETAIL_UPDATE | REQ_DETAIL_WATCHDOG);
- }
- else if (result && slot)
- {
-@@ -270,7 +273,7 @@ do_health_check_child(int *node_id)
- }
-
- /* Discard persistent connections */
-- discard_persistent_connection(*node_id);
-+ discard_persistent_connection(node_id);
-
- /*
- Update health check duration only if health check was not skipped
-@@ -298,7 +301,7 @@ do_health_check_child(int *node_id)
-
- memcpy(&mystat, (void *)stats, sizeof(mystat));
-
-- sleep(pool_config->health_check_params[*node_id].health_check_period);
-+ sleep(pool_config->health_check_params[node_id].health_check_period);
- }
- }
- exit(0);
-diff --git a/src/main/pgpool_main.c b/src/main/pgpool_main.c
-index d74cf12b2..12a906809 100644
---- a/src/main/pgpool_main.c
-+++ b/src/main/pgpool_main.c
-@@ -151,7 +151,7 @@ static void signal_user1_to_parent_with_reason(User1SignalReason reason);
- static void FileUnlink(int code, Datum path);
- static pid_t pcp_fork_a_child(int *fds, char *pcp_conf_file);
- static pid_t fork_a_child(int *fds, int id);
--static pid_t worker_fork_a_child(ProcessType type, void (*func) (), void *params);
-+static pid_t worker_fork_a_child(ProcessType type, void (*func) (void *), void *params);
- static int create_unix_domain_socket(struct sockaddr_un un_addr_tmp, const char *group, const int permissions);
- static int *create_unix_domain_sockets_by_list(struct sockaddr_un *un_addrs, char *group, int permissions, int n_sockets);
- static int *create_inet_domain_sockets(const char *hostname, const int port);
-@@ -876,7 +876,7 @@ fork_a_child(int *fds, int id)
- * fork worker child process
- */
- static pid_t
--worker_fork_a_child(ProcessType type, void (*func) (), void *params)
-+worker_fork_a_child(ProcessType type, void (*func) (void *), void *params)
- {
- pid_t pid;
-
-diff --git a/src/rewrite/pool_timestamp.c b/src/rewrite/pool_timestamp.c
-index 4dca05e9f..c10259675 100644
---- a/src/rewrite/pool_timestamp.c
-+++ b/src/rewrite/pool_timestamp.c
-@@ -5,7 +5,7 @@
- * pgpool: a language independent connection pool server for PostgreSQL
- * written by Tatsuo Ishii
- *
-- * Copyright (c) 2003-2023 PgPool Global Development Group
-+ * Copyright (c) 2003-2025 PgPool Global Development Group
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby
-@@ -74,7 +74,6 @@ static char *get_current_timestamp(POOL_CONNECTION_POOL * backend);
- static Node *makeTsExpr(TSRewriteContext * ctx);
- static TypeCast *makeTypeCastFromSvfOp(SQLValueFunctionOp op);
- static A_Const *makeStringConstFromQuery(POOL_CONNECTION_POOL * backend, char *expression);
--bool raw_expression_tree_walker(Node *node, bool (*walker) (), void *context);
-
- POOL_RELCACHE *ts_relcache;
-
-@@ -1360,9 +1359,10 @@ makeTypeCastFromSvfOp(SQLValueFunctionOp op)
- */
- bool
- raw_expression_tree_walker(Node *node,
-- bool (*walker) (),
-+ tree_walker_callback walker,
- void *context)
- {
-+#define WALK(n,c) walker((Node *) (n), c)
- ListCell *temp;
-
- /*
-@@ -1395,17 +1395,17 @@ raw_expression_tree_walker(Node *node,
- /* we assume the colnames list isn't interesting */
- break;
- case T_RangeVar:
-- return walker(((RangeVar *) node)->alias, context);
-+ return WALK(((RangeVar *) node)->alias, context);
- case T_GroupingFunc:
-- return walker(((GroupingFunc *) node)->args, context);
-+ return WALK(((GroupingFunc *) node)->args, context);
- case T_SubLink:
- {
- SubLink *sublink = (SubLink *) node;
-
-- if (walker(sublink->testexpr, context))
-+ if (WALK(sublink->testexpr, context))
- return true;
- /* we assume the operName is not interesting */
-- if (walker(sublink->subselect, context))
-+ if (WALK(sublink->subselect, context))
- return true;
- }
- break;
-@@ -1413,7 +1413,7 @@ raw_expression_tree_walker(Node *node,
- {
- CaseExpr *caseexpr = (CaseExpr *) node;
-
-- if (walker(caseexpr->arg, context))
-+ if (WALK(caseexpr->arg, context))
- return true;
- /* we assume walker doesn't care about CaseWhens, either */
- foreach(temp, caseexpr->args)
-@@ -1421,48 +1421,48 @@ raw_expression_tree_walker(Node *node,
- CaseWhen *when = (CaseWhen *) lfirst(temp);
-
- Assert(IsA(when, CaseWhen));
-- if (walker(when->expr, context))
-+ if (WALK(when->expr, context))
- return true;
-- if (walker(when->result, context))
-+ if (WALK(when->result, context))
- return true;
- }
-- if (walker(caseexpr->defresult, context))
-+ if (WALK(caseexpr->defresult, context))
- return true;
- }
- break;
- case T_RowExpr:
- /* Assume colnames isn't interesting */
-- return walker(((RowExpr *) node)->args, context);
-+ return WALK(((RowExpr *) node)->args, context);
- case T_CoalesceExpr:
-- return walker(((CoalesceExpr *) node)->args, context);
-+ return WALK(((CoalesceExpr *) node)->args, context);
- case T_MinMaxExpr:
-- return walker(((MinMaxExpr *) node)->args, context);
-+ return WALK(((MinMaxExpr *) node)->args, context);
- case T_XmlExpr:
- {
- XmlExpr *xexpr = (XmlExpr *) node;
-
-- if (walker(xexpr->named_args, context))
-+ if (WALK(xexpr->named_args, context))
- return true;
- /* we assume walker doesn't care about arg_names */
-- if (walker(xexpr->args, context))
-+ if (WALK(xexpr->args, context))
- return true;
- }
- break;
- case T_NullTest:
-- return walker(((NullTest *) node)->arg, context);
-+ return WALK(((NullTest *) node)->arg, context);
- case T_BooleanTest:
-- return walker(((BooleanTest *) node)->arg, context);
-+ return WALK(((BooleanTest *) node)->arg, context);
- case T_JoinExpr:
- {
- JoinExpr *join = (JoinExpr *) node;
-
-- if (walker(join->larg, context))
-+ if (WALK(join->larg, context))
- return true;
-- if (walker(join->rarg, context))
-+ if (WALK(join->rarg, context))
- return true;
-- if (walker(join->quals, context))
-+ if (WALK(join->quals, context))
- return true;
-- if (walker(join->alias, context))
-+ if (WALK(join->alias, context))
- return true;
- /* using list is deemed uninteresting */
- }
-@@ -1471,18 +1471,18 @@ raw_expression_tree_walker(Node *node,
- {
- IntoClause *into = (IntoClause *) node;
-
-- if (walker(into->rel, context))
-+ if (WALK(into->rel, context))
- return true;
- /* colNames, options are deemed uninteresting */
- /* viewQuery should be null in raw parsetree, but check it */
-- if (walker(into->viewQuery, context))
-+ if (WALK(into->viewQuery, context))
- return true;
- }
- break;
- case T_List:
- foreach(temp, (List *) node)
- {
-- if (walker((Node *) lfirst(temp), context))
-+ if (WALK((Node *) lfirst(temp), context))
- return true;
- }
- break;
-@@ -1490,11 +1490,11 @@ raw_expression_tree_walker(Node *node,
- {
- MergeWhenClause *mergeWhenClause = (MergeWhenClause *) node;
-
-- if (walker(mergeWhenClause->condition, context))
-+ if (WALK(mergeWhenClause->condition, context))
- return true;
-- if (walker(mergeWhenClause->targetList, context))
-+ if (WALK(mergeWhenClause->targetList, context))
- return true;
-- if (walker(mergeWhenClause->values, context))
-+ if (WALK(mergeWhenClause->values, context))
- return true;
- }
- break;
-@@ -1502,9 +1502,9 @@ raw_expression_tree_walker(Node *node,
- {
- MergeAction *action = (MergeAction *) node;
-
-- if (walker(action->targetList, context))
-+ if (WALK(action->targetList, context))
- return true;
-- if (walker(action->qual, context))
-+ if (WALK(action->qual, context))
- return true;
- }
- break;
-@@ -1512,17 +1512,17 @@ raw_expression_tree_walker(Node *node,
- {
- InsertStmt *stmt = (InsertStmt *) node;
-
-- if (walker(stmt->relation, context))
-+ if (WALK(stmt->relation, context))
- return true;
-- if (walker(stmt->cols, context))
-+ if (WALK(stmt->cols, context))
- return true;
-- if (walker(stmt->selectStmt, context))
-+ if (WALK(stmt->selectStmt, context))
- return true;
-- if (walker(stmt->onConflictClause, context))
-+ if (WALK(stmt->onConflictClause, context))
- return true;
-- if (walker(stmt->returningList, context))
-+ if (WALK(stmt->returningList, context))
- return true;
-- if (walker(stmt->withClause, context))
-+ if (WALK(stmt->withClause, context))
- return true;
- }
- break;
-@@ -1530,15 +1530,15 @@ raw_expression_tree_walker(Node *node,
- {
- DeleteStmt *stmt = (DeleteStmt *) node;
-
-- if (walker(stmt->relation, context))
-+ if (WALK(stmt->relation, context))
- return true;
-- if (walker(stmt->usingClause, context))
-+ if (WALK(stmt->usingClause, context))
- return true;
-- if (walker(stmt->whereClause, context))
-+ if (WALK(stmt->whereClause, context))
- return true;
-- if (walker(stmt->returningList, context))
-+ if (WALK(stmt->returningList, context))
- return true;
-- if (walker(stmt->withClause, context))
-+ if (WALK(stmt->withClause, context))
- return true;
- }
- break;
-@@ -1546,17 +1546,17 @@ raw_expression_tree_walker(Node *node,
- {
- UpdateStmt *stmt = (UpdateStmt *) node;
-
-- if (walker(stmt->relation, context))
-+ if (WALK(stmt->relation, context))
- return true;
-- if (walker(stmt->targetList, context))
-+ if (WALK(stmt->targetList, context))
- return true;
-- if (walker(stmt->whereClause, context))
-+ if (WALK(stmt->whereClause, context))
- return true;
-- if (walker(stmt->fromClause, context))
-+ if (WALK(stmt->fromClause, context))
- return true;
-- if (walker(stmt->returningList, context))
-+ if (WALK(stmt->returningList, context))
- return true;
-- if (walker(stmt->withClause, context))
-+ if (WALK(stmt->withClause, context))
- return true;
- }
- break;
-@@ -1564,37 +1564,37 @@ raw_expression_tree_walker(Node *node,
- {
- SelectStmt *stmt = (SelectStmt *) node;
-
-- if (walker(stmt->distinctClause, context))
-+ if (WALK(stmt->distinctClause, context))
- return true;
-- if (walker(stmt->intoClause, context))
-+ if (WALK(stmt->intoClause, context))
- return true;
-- if (walker(stmt->targetList, context))
-+ if (WALK(stmt->targetList, context))
- return true;
-- if (walker(stmt->fromClause, context))
-+ if (WALK(stmt->fromClause, context))
- return true;
-- if (walker(stmt->whereClause, context))
-+ if (WALK(stmt->whereClause, context))
- return true;
-- if (walker(stmt->groupClause, context))
-+ if (WALK(stmt->groupClause, context))
- return true;
-- if (walker(stmt->havingClause, context))
-+ if (WALK(stmt->havingClause, context))
- return true;
-- if (walker(stmt->windowClause, context))
-+ if (WALK(stmt->windowClause, context))
- return true;
-- if (walker(stmt->valuesLists, context))
-+ if (WALK(stmt->valuesLists, context))
- return true;
-- if (walker(stmt->sortClause, context))
-+ if (WALK(stmt->sortClause, context))
- return true;
-- if (walker(stmt->limitOffset, context))
-+ if (WALK(stmt->limitOffset, context))
- return true;
-- if (walker(stmt->limitCount, context))
-+ if (WALK(stmt->limitCount, context))
- return true;
-- if (walker(stmt->lockingClause, context))
-+ if (WALK(stmt->lockingClause, context))
- return true;
-- if (walker(stmt->withClause, context))
-+ if (WALK(stmt->withClause, context))
- return true;
-- if (walker(stmt->larg, context))
-+ if (WALK(stmt->larg, context))
- return true;
-- if (walker(stmt->rarg, context))
-+ if (WALK(stmt->rarg, context))
- return true;
- }
- break;
-@@ -1602,9 +1602,9 @@ raw_expression_tree_walker(Node *node,
- {
- A_Expr *expr = (A_Expr *) node;
-
-- if (walker(expr->lexpr, context))
-+ if (WALK(expr->lexpr, context))
- return true;
-- if (walker(expr->rexpr, context))
-+ if (WALK(expr->rexpr, context))
- return true;
- /* operator name is deemed uninteresting */
- }
-@@ -1613,7 +1613,7 @@ raw_expression_tree_walker(Node *node,
- {
- BoolExpr *expr = (BoolExpr *) node;
-
-- if (walker(expr->args, context))
-+ if (WALK(expr->args, context))
- return true;
- }
- break;
-@@ -1624,26 +1624,26 @@ raw_expression_tree_walker(Node *node,
- {
- FuncCall *fcall = (FuncCall *) node;
-
-- if (walker(fcall->args, context))
-+ if (WALK(fcall->args, context))
- return true;
-- if (walker(fcall->agg_order, context))
-+ if (WALK(fcall->agg_order, context))
- return true;
-- if (walker(fcall->agg_filter, context))
-+ if (WALK(fcall->agg_filter, context))
- return true;
-- if (walker(fcall->over, context))
-+ if (WALK(fcall->over, context))
- return true;
- /* function name is deemed uninteresting */
- }
- break;
- case T_NamedArgExpr:
-- return walker(((NamedArgExpr *) node)->arg, context);
-+ return WALK(((NamedArgExpr *) node)->arg, context);
- case T_A_Indices:
- {
- A_Indices *indices = (A_Indices *) node;
-
-- if (walker(indices->lidx, context))
-+ if (WALK(indices->lidx, context))
- return true;
-- if (walker(indices->uidx, context))
-+ if (WALK(indices->uidx, context))
- return true;
- }
- break;
-@@ -1651,51 +1651,51 @@ raw_expression_tree_walker(Node *node,
- {
- A_Indirection *indir = (A_Indirection *) node;
-
-- if (walker(indir->arg, context))
-+ if (WALK(indir->arg, context))
- return true;
-- if (walker(indir->indirection, context))
-+ if (WALK(indir->indirection, context))
- return true;
- }
- break;
- case T_A_ArrayExpr:
-- return walker(((A_ArrayExpr *) node)->elements, context);
-+ return WALK(((A_ArrayExpr *) node)->elements, context);
- case T_ResTarget:
- {
- ResTarget *rt = (ResTarget *) node;
-
-- if (walker(rt->indirection, context))
-+ if (WALK(rt->indirection, context))
- return true;
-- if (walker(rt->val, context))
-+ if (WALK(rt->val, context))
- return true;
- }
- break;
- case T_MultiAssignRef:
-- return walker(((MultiAssignRef *) node)->source, context);
-+ return WALK(((MultiAssignRef *) node)->source, context);
- case T_TypeCast:
- {
- TypeCast *tc = (TypeCast *) node;
-
-- if (walker(tc->arg, context))
-+ if (WALK(tc->arg, context))
- return true;
-- if (walker(tc->typeName, context))
-+ if (WALK(tc->typeName, context))
- return true;
- }
- break;
- case T_CollateClause:
-- return walker(((CollateClause *) node)->arg, context);
-+ return WALK(((CollateClause *) node)->arg, context);
- case T_SortBy:
-- return walker(((SortBy *) node)->node, context);
-+ return WALK(((SortBy *) node)->node, context);
- case T_WindowDef:
- {
- WindowDef *wd = (WindowDef *) node;
-
-- if (walker(wd->partitionClause, context))
-+ if (WALK(wd->partitionClause, context))
- return true;
-- if (walker(wd->orderClause, context))
-+ if (WALK(wd->orderClause, context))
- return true;
-- if (walker(wd->startOffset, context))
-+ if (WALK(wd->startOffset, context))
- return true;
-- if (walker(wd->endOffset, context))
-+ if (WALK(wd->endOffset, context))
- return true;
- }
- break;
-@@ -1703,9 +1703,9 @@ raw_expression_tree_walker(Node *node,
- {
- RangeSubselect *rs = (RangeSubselect *) node;
-
-- if (walker(rs->subquery, context))
-+ if (WALK(rs->subquery, context))
- return true;
-- if (walker(rs->alias, context))
-+ if (WALK(rs->alias, context))
- return true;
- }
- break;
-@@ -1713,11 +1713,11 @@ raw_expression_tree_walker(Node *node,
- {
- RangeFunction *rf = (RangeFunction *) node;
-
-- if (walker(rf->functions, context))
-+ if (WALK(rf->functions, context))
- return true;
-- if (walker(rf->alias, context))
-+ if (WALK(rf->alias, context))
- return true;
-- if (walker(rf->coldeflist, context))
-+ if (WALK(rf->coldeflist, context))
- return true;
- }
- break;
-@@ -1725,12 +1725,12 @@ raw_expression_tree_walker(Node *node,
- {
- RangeTableSample *rts = (RangeTableSample *) node;
-
-- if (walker(rts->relation, context))
-+ if (WALK(rts->relation, context))
- return true;
- /* method name is deemed uninteresting */
-- if (walker(rts->args, context))
-+ if (WALK(rts->args, context))
- return true;
-- if (walker(rts->repeatable, context))
-+ if (WALK(rts->repeatable, context))
- return true;
- }
- break;
-@@ -1738,9 +1738,9 @@ raw_expression_tree_walker(Node *node,
- {
- TypeName *tn = (TypeName *) node;
-
-- if (walker(tn->typmods, context))
-+ if (WALK(tn->typmods, context))
- return true;
-- if (walker(tn->arrayBounds, context))
-+ if (WALK(tn->arrayBounds, context))
- return true;
- /* type name itself is deemed uninteresting */
- }
-@@ -1749,38 +1749,38 @@ raw_expression_tree_walker(Node *node,
- {
- ColumnDef *coldef = (ColumnDef *) node;
-
-- if (walker(coldef->typeName, context))
-+ if (WALK(coldef->typeName, context))
- return true;
-- if (walker(coldef->raw_default, context))
-+ if (WALK(coldef->raw_default, context))
- return true;
-- if (walker(coldef->collClause, context))
-+ if (WALK(coldef->collClause, context))
- return true;
- /* for now, constraints are ignored */
- }
- break;
- case T_GroupingSet:
-- return walker(((GroupingSet *) node)->content, context);
-+ return WALK(((GroupingSet *) node)->content, context);
- case T_LockingClause:
-- return walker(((LockingClause *) node)->lockedRels, context);
-+ return WALK(((LockingClause *) node)->lockedRels, context);
- case T_XmlSerialize:
- {
- XmlSerialize *xs = (XmlSerialize *) node;
-
-- if (walker(xs->expr, context))
-+ if (WALK(xs->expr, context))
- return true;
-- if (walker(xs->typeName, context))
-+ if (WALK(xs->typeName, context))
- return true;
- }
- break;
- case T_WithClause:
-- return walker(((WithClause *) node)->ctes, context);
-+ return WALK(((WithClause *) node)->ctes, context);
- case T_InferClause:
- {
- InferClause *stmt = (InferClause *) node;
-
-- if (walker(stmt->indexElems, context))
-+ if (WALK(stmt->indexElems, context))
- return true;
-- if (walker(stmt->whereClause, context))
-+ if (WALK(stmt->whereClause, context))
- return true;
- }
- break;
-@@ -1788,16 +1788,16 @@ raw_expression_tree_walker(Node *node,
- {
- OnConflictClause *stmt = (OnConflictClause *) node;
-
-- if (walker(stmt->infer, context))
-+ if (WALK(stmt->infer, context))
- return true;
-- if (walker(stmt->targetList, context))
-+ if (WALK(stmt->targetList, context))
- return true;
-- if (walker(stmt->whereClause, context))
-+ if (WALK(stmt->whereClause, context))
- return true;
- }
- break;
- case T_CommonTableExpr:
-- return walker(((CommonTableExpr *) node)->ctequery, context);
-+ return WALK(((CommonTableExpr *) node)->ctequery, context);
- default:
-
- /*
-diff --git a/src/streaming_replication/pool_worker_child.c b/src/streaming_replication/pool_worker_child.c
-index 746659e0f..e91deaff5 100644
---- a/src/streaming_replication/pool_worker_child.c
-+++ b/src/streaming_replication/pool_worker_child.c
-@@ -106,7 +106,7 @@ static volatile bool follow_primary_lock_acquired;
- * worker child main loop
- */
- void
--do_worker_child(void)
-+do_worker_child(void *params)
- {
- sigjmp_buf local_sigjmp_buf;
- MemoryContext WorkerMemoryContext;
-diff --git a/src/test/regression/tests/010.rewrite_timestamp/timestamp/main.c b/src/test/regression/tests/010.rewrite_timestamp/timestamp/main.c
-index 89a36f2c0..da1c71584 100644
---- a/src/test/regression/tests/010.rewrite_timestamp/timestamp/main.c
-+++ b/src/test/regression/tests/010.rewrite_timestamp/timestamp/main.c
-@@ -90,7 +90,9 @@ Pgversion(POOL_CONNECTION_POOL * backend)
- }
-
- POOL_RELCACHE *
--pool_create_relcache(int cachesize, char *sql, func_ptr register_func, func_ptr unregister_func, bool issessionlocal)
-+pool_create_relcache(int cachesize, char *sql,
-+ void *(*register_func) (), void *(*unregister_func) (),
-+ bool issessionlocal)
- {
- return (POOL_RELCACHE *) 1;
- }
-diff --git a/src/utils/pool_relcache.c b/src/utils/pool_relcache.c
-index 32362fc6b..e5bf8e0d8 100644
---- a/src/utils/pool_relcache.c
-+++ b/src/utils/pool_relcache.c
-@@ -5,7 +5,7 @@
- * pgpool: a language independent connection pool server for PostgreSQL
- * written by Tatsuo Ishii
- *
-- * Copyright (c) 2003-2023 PgPool Global Development Group
-+ * Copyright (c) 2003-2025 PgPool Global Development Group
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby
-@@ -48,7 +48,7 @@ static char *relation_cache_to_query_cache(POOL_SELECT_RESULT *res,size_t *size)
- */
- POOL_RELCACHE *
- pool_create_relcache(int cachesize, char *sql,
-- func_ptr register_func, func_ptr unregister_func,
-+ void *(*register_func) (POOL_SELECT_RESULT *), void *(*unregister_func) (void *),
- bool issessionlocal)
- {
- POOL_RELCACHE *p;
---
-2.25.1
-