postgres.git / summary / log / commit / refs

commit    44817d97bca361f2be7fac64afa50715f959c11c
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Sat Aug 27 06:22:07 2022 +0000
First released in: 16.0, 14.6, 15.0

    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 684327885d3..4bf053697a3 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(); [parent: d4e9bca40309]