From 8ad4148313d42a6d260c5c63f295bf3a22dae252 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 8 Jun 2026 15:29:21 +0900 Subject: [PATCH] Fix memory leak in pgstat_progress_parallel_incr_param() When called from a parallel worker, this function calls initStringInfo() and pq_beginmessage(), causing a StringInfo allocation to happen twice. pq_endmessage() frees only the second allocation, with each call leaking ~1 kB into the per-worker memory context. This could cause a few hundred megabytes worth of memory to pile up until the worker exits (the message allocations happen in the parallel worker context), with the situation being worse the longer a parallel worker runs. Oversight in f1889729dd3. Author: Baji Shaik Reviewed-by: Sami Imseih Reviewed-by: Tristan Partin Discussion: https://postgr.es/m/CA+fm-RMopta1Dmq8udiU5sp+zwTvhUf4+xfbr3rZDfczH+p-xw@mail.gmail.com Backpatch-through: 17 --- src/backend/utils/activity/backend_progress.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/backend/utils/activity/backend_progress.c b/src/backend/utils/activity/backend_progress.c index c78c5eb5076..a0002391a21 100644 --- a/src/backend/utils/activity/backend_progress.c +++ b/src/backend/utils/activity/backend_progress.c @@ -100,8 +100,6 @@ pgstat_progress_parallel_incr_param(int index, int64 incr) { static StringInfoData progress_message; - initStringInfo(&progress_message); - pq_beginmessage(&progress_message, PqMsg_Progress); pq_sendint32(&progress_message, index); pq_sendint64(&progress_message, incr);