From 8919eff90da2f20c27cd54b89653924ba18a6922 Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii Date: Mon, 22 Jul 2024 19:32:41 +0900 Subject: [PATCH] Fix another segmentation fault. It is reported that pgpool child segfaulted in pool_do_auth. The cause was MAIN_CONNECTION() returns NULL. It seems my_main_node_id was set to incorrect node id 0, which was actually in down status. thus there was no connection in cp->slots[0]. In this particular case a client connected to pgpool while failover occurred in another pgpool node, and it was propagated by watchdog, which changed backend_status in shared memory. new_connection() properly updates my_backend_status but it forgot to update my_main_node_id, and MAIN_CONNECTION returned incorrect backend id. Problem reported by: Emond Papegaaij Discussion: [pgpool-general: 9175] Segmentation fault https://www.pgpool.net/pipermail/pgpool-general/2024-July/001852.html Backpatch-through: V4.1. --- src/protocol/pool_connection_pool.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/protocol/pool_connection_pool.c b/src/protocol/pool_connection_pool.c index c0d65c39b..79ee7e786 100644 --- a/src/protocol/pool_connection_pool.c +++ b/src/protocol/pool_connection_pool.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-2024 PgPool Global Development Group * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby @@ -919,6 +919,7 @@ static POOL_CONNECTION_POOL * new_connection(POOL_CONNECTION_POOL * p) /* sync local status with global status */ *(my_backend_status[i]) = status; + my_main_node_id = Req_info->main_node_id; continue; } -- 2.39.5