0002-Allocate-progress-message-buffer-once-per-parallel-w.patch
application/octet-stream
Filename: 0002-Allocate-progress-message-buffer-once-per-parallel-w.patch
Type: application/octet-stream
Part: 1
Patch
Format: format-patch
Series: patch 0002
Subject: Allocate progress message buffer once per parallel worker
| File | + | − |
|---|---|---|
| src/backend/utils/activity/backend_progress.c | 15 | 3 |
From 94e1cd63954616f81953950aaf712fa2acf78913 Mon Sep 17 00:00:00 2001
From: Baji Shaik <baji.pgdev@gmail.com>
Date: Fri, 5 Jun 2026 18:42:08 -0500
Subject: [PATCH 2/2] Allocate progress message buffer once per parallel worker
The static StringInfoData declared in pgstat_progress_parallel_incr_param()
was clearly intended to be allocated once per process and reused across
calls, but the buggy double-initStringInfo() pattern (fixed in the
previous commit) defeated that intent: each call still allocated and
freed a fresh buffer via pq_beginmessage() / pq_endmessage().
Restore the original intent by initializing the static buffer only on
the first call and switching to pq_beginmessage_reuse() and
pq_endmessage_reuse(), which reset and reuse the existing buffer
without (re)allocating.
Author: Baji Shaik <baji.pgdev@gmail.com>
---
src/backend/utils/activity/backend_progress.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/backend/utils/activity/backend_progress.c b/src/backend/utils/activity/backend_progress.c
index 6d2049105ab..0483741a80e 100644
--- a/src/backend/utils/activity/backend_progress.c
+++ b/src/backend/utils/activity/backend_progress.c
@@ -99,11 +99,23 @@ pgstat_progress_parallel_incr_param(int index, int64 incr)
if (IsParallelWorker())
{
static StringInfoData progress_message;
-
- pq_beginmessage(&progress_message, PqMsg_Progress);
+ static bool progress_message_initialized = false;
+
+ /*
+ * Initialize the message buffer once per process; pq_beginmessage_reuse()
+ * and pq_endmessage_reuse() reset and reuse it on each call to avoid
+ * palloc overhead.
+ */
+ if (!progress_message_initialized)
+ {
+ initStringInfo(&progress_message);
+ progress_message_initialized = true;
+ }
+
+ pq_beginmessage_reuse(&progress_message, PqMsg_Progress);
pq_sendint32(&progress_message, index);
pq_sendint64(&progress_message, incr);
- pq_endmessage(&progress_message);
+ pq_endmessage_reuse(&progress_message);
}
else
pgstat_progress_incr_param(index, incr);
--
2.50.1 (Apple Git-155)