pgpool2.git / summary / log / commit / refs
commit cf0bb90d751ea10354953749f02a45e73ada0c32
Author: Tatsuo Ishii <ishii@postgresql.org>
Date: Tue Dec 12 06:18:56 2017 +0000
Fix for re-sync logic in reading packet from backend.
read_kind_from_backend(), which reads message kind from backend,
re-syncs backend nodes when a ready for query message is
received. Unfortunately it forgot to call
pool_pending_message_pull_out() to delete sync pending message. This
leads to random stuck while reading packets from backend. Fix this to
call pool_pending_message_pull_out().
src/protocol/pool_process_query.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/protocol/pool_process_query.c b/src/protocol/pool_process_query.c
index 11d3dc349..31c773f91 100644
--- a/src/protocol/pool_process_query.c
+++ b/src/protocol/pool_process_query.c
@@ -3455,6 +3455,16 @@ void read_kind_from_backend(POOL_CONNECTION *frontend, POOL_CONNECTION_POOL *bac
ereport(DEBUG1,
(errmsg("read_kind_from_backend: succeeded in re-sync")));
*decided_kind = kind;
+
+ if (SL_MODE && pool_get_session_context(true) && pool_is_doing_extended_query_message() &&
+ msg && msg->type == POOL_SYNC)
+ {
+ POOL_PENDING_MESSAGE *pending_message;
+
+ pending_message = pool_pending_message_pull_out();
+ if (pending_message)
+ pool_pending_message_free_pending_message(pending_message);
+ }
return;
}
[parent: ce42ffcf9f54]