Since all current and foreseeable future command tags will be pure ASCII,
there is no need to do conversion on them. This saves a few cycles and also
avoids polluting otherwise-pristine subtransaction memory contexts, which
is the cause of the backend memory leak exhibited in bug #5302. (Someday
we'll probably want to have a better method of determining whether
subtransaction contexts need to be kept around, but today is not that day.)
Backpatch to 8.0. The cycle-shaving aspect of this would work in 7.4
too, but without subtransactions the memory-leak aspect doesn't apply,
so it doesn't seem worth touching 7.4.
{
case DestRemote:
case DestRemoteExecute:
- pq_puttextmessage('C', commandTag);
+ /*
+ * We assume the commandTag is plain ASCII and therefore
+ * requires no encoding conversion.
+ */
+ pq_putmessage('C', commandTag, strlen(commandTag) + 1);
break;
case DestNone:
if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 3)
pq_putemptymessage('I');
else
- pq_puttextmessage('I', "");
+ pq_putmessage('I', "", 1);
break;
case DestNone: