aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-01-30 20:10:11 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2010-01-30 20:10:11 +0000
commit0c969e1fec43a34381d8702dce66571d04ee9441 (patch)
treee8a4bee64e778ce9ca46f8b305afa4c4a35863b4
parent04cec1a95bc4bbe10a2b9877238d6d86d3494d02 (diff)
downloadpostgresql-0c969e1fec43a34381d8702dce66571d04ee9441.tar.gz
postgresql-0c969e1fec43a34381d8702dce66571d04ee9441.zip
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.
-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 8276485834e..e75347f8665 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.70 2006/08/30 23:34:21 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/tcop/dest.c,v 1.70.2.1 2010/01/30 20:10:11 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -149,7 +149,11 @@ EndCommand(const char *commandTag, CommandDest dest)
{
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:
@@ -189,7 +193,7 @@ NullCommand(CommandDest dest)
if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 3)
pq_putemptymessage('I');
else
- pq_puttextmessage('I', "");
+ pq_putmessage('I', "", 1);
break;
case DestNone: