From ba90424450fd4dba964518daf597b0f317abd651 Mon Sep 17 00:00:00 2001 From: Tatsuo Ishii Date: Thu, 18 Jan 2018 22:14:38 +0900 Subject: [PATCH] Fix queries hanging in parse_before_bind with extended protocol and replication + load-balancing. In case the client sends a BIND message for a query that has not yet been parsed by the executing node, the PARSE will be executed before attempting to BIND the parameters. However, during the execution of the PARSE, the session context is not set to in_progress, which leads to wrong backend validity tests in read_kind_from_backend which in turn makes the process wait on a backend which is not going to send anything. Fixes bug #377. Problem analysis and fix by Ancoron Luciferis and me. --- src/protocol/pool_proto_modules.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/protocol/pool_proto_modules.c b/src/protocol/pool_proto_modules.c index 362c1087d..631fa5d3c 100644 --- a/src/protocol/pool_proto_modules.c +++ b/src/protocol/pool_proto_modules.c @@ -3270,6 +3270,8 @@ static POOL_STATUS parse_before_bind(POOL_CONNECTION *frontend, if (!SL_MODE && parse_was_sent) { + pool_set_query_in_progress(); + while (kind != '1') { PG_TRY(); -- 2.39.5