From 3948537442e2c1c1b382d756ded624dd6c96d653 Mon Sep 17 00:00:00 2001 From: HuSen8891 Date: Fri, 29 Aug 2025 18:20:35 +0800 Subject: [PATCH] Fix: quick exit in dumptuples if query execution is finished If QueryFinishPending is set when query is running into dumptuples, the tuplecontext is reset but memtuples are not cumsumed. When query is running into dumptuples again, tuplesort_sort_memtuples will access these memtuples, and the memory allocated in tuplecontext is already freed, this will cause invalid memory access. To avoid this situation, do nothing in dumptuples if QueryFinishPending is set. --- src/backend/utils/sort/tuplesort.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index d3978ca987d..5a5415d4452 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -3232,6 +3232,14 @@ dumptuples(Tuplesortstate *state, bool alltuples) !alltuples) return; + /* + * do nothing if we are told to finish execution. + */ + if (QueryFinishPending) + { + return; + } + /* * Final call might require no sorting, in rare cases where we just so * happen to have previously LACKMEM()'d at the point where exactly all