> 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