From aeec3534ccf3fa4a207694955b4078a9a9dafc8f Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sat, 27 Aug 2022 15:22:11 +0900 Subject: [PATCH] Use correct connection for cancellation in frontend's parallel slots While waiting for slots to become available in wait_on_slots() in parallel_slot.c, the cancellation always relied on the first connection in the set to do the job. This could cause problems when this slot's socket is gone as PQgetCancel() would return NULL in this case. Rather than always using the first connection, this changes the logic to use the first valid connection for the cancellation. Author: Ranier Vilela Reviewed-by: Justin Pryzby Discussion: https://postgr.es/m/CAEudQAokk1h_pUwGXsYS4oVOuf35s1O2o3TXGHpV8=AWikvgHA@mail.gmail.com Backpatch-through: 14 --- src/fe_utils/parallel_slot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fe_utils/parallel_slot.c b/src/fe_utils/parallel_slot.c index 69581157c2..dcdad9e30c 100644 --- a/src/fe_utils/parallel_slot.c +++ b/src/fe_utils/parallel_slot.c @@ -237,7 +237,7 @@ wait_on_slots(ParallelSlotArray *sa) if (cancelconn == NULL) return false; - SetCancelConn(sa->slots->connection); + SetCancelConn(cancelconn); i = select_loop(maxFd, &slotset); ResetCancelConn();