Fix hang after a flush message received.
authorTatsuo Ishii <ishii@postgresql.org>
Tue, 30 Jul 2024 09:17:57 +0000 (18:17 +0900)
committerTatsuo Ishii <ishii@postgresql.org>
Tue, 30 Jul 2024 09:30:30 +0000 (18:30 +0900)
commit251e4227f6388f9dfc31503ae9d9725af22af2cc
tree93feb902215115d874a8654717d18eadb49b726d
parentd8f8ccae4450e15def60fc0ff1abfd8ca6cd6fb5
Fix hang after a flush message received.

Previously pgpool could hang after a flush message arrives. Consider
following scenario:

(1) backend sends a portal suspend message.
(2) pgool write it in the frontend write buffer. But not flush it.
(3) The frontend sends a flush message to pgpool.
(4) pgpool fowards the flush message to backend.
(5) Since there's no pending message in backend, nothing happen.
(6) The frontend waits for the portal suspend message from pgpool in vain.

To fix this, at (4) pgpool flushes data in the frontend write buffer
if some data remains (in this case the portal suspend message). Then
the frontend will send next request message to pgpool.

Discussion: https://github.com/pgpool/pgpool2/issues/59
Backpatch-through: master, 4.5, 4.4, 4.3, 4.2 and 4.1.
src/protocol/pool_proto_modules.c