> If you have trouble convincing people we need this for some new
> reason, then maybe you could review the existing callers to see if
> some of the existing call sites make it any more convincing.
> 
> A very quick review, I found:
> 
> send_message_to_frontend() initStringInfo(&buf) 1024 is probably too big
> HandleParallelMessages() seems to know exactly how many bytes are
> needed. Can this use a read-only StringInfo?
> send_feedback() seems to know what size of the buffer it needs

I looked into send_feedback(). Maybe with the new API we could do
something like attached?

> buf_init() knows the exact size.
> 
> I didn't review the patch in detail, but I think "initsize" would be a
> better parameter name than "size".
> 
> David
> 
> 
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index 334bf3e7aff..66cc4ec49a1 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -3885,8 +3885,10 @@ send_feedback(XLogRecPtr recvpos, bool force, bool requestReply)
 	if (!reply_message)
 	{
 		MemoryContext oldctx = MemoryContextSwitchTo(ApplyContext);
-
-		reply_message = makeStringInfo();
+		int		initsize = 
+			sizeof(char) + sizeof(int64) * 3 +
+			sizeof(TimestampTz) + sizeof(bool) + 1;
+		reply_message = makeStringInfoExtended(initsize);
 		MemoryContextSwitchTo(oldctx);
 	}
 	else

Reply via email to