summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-01-30 20:10:22 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2010-01-30 20:10:22 +0000
commit3255ea02309c5b655a61f3a74742675cb629842d (patch)
tree722237d7dc741e969032e9bb7a07c676558b747a /src
parentc4c29e0d154c88c58738ee1e257da84f2bf5786b (diff)
Avoid performing encoding conversion on command tag strings during EndCommand.
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.
Diffstat (limited to 'src')
-rw-r--r--src/backend/tcop/dest.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backend/tcop/dest.c b/src/backend/tcop/dest.c
index ca741cd2b3a..1eaa0ce1061 100644
--- a/src/backend/tcop/dest.c
+++ b/src/backend/tcop/dest.c
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/tcop/dest.c,v 1.64 2004/12/31 22:01:16 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/tcop/dest.c,v 1.64.4.1 2010/01/30 20:10:22 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -141,7 +141,11 @@ EndCommand(const char *commandTag, CommandDest dest)
{
case Remote:
case RemoteExecute:
- 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 None:
@@ -180,7 +184,7 @@ NullCommand(CommandDest dest)
if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 3)
pq_putemptymessage('I');
else
- pq_puttextmessage('I', "");
+ pq_putmessage('I', "", 1);
break;
case None: