aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-10-18 23:07:29 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-10-18 23:07:29 +0000
commit43568d11ad5f6ee456d8e7239b3e42f1bdc27bc2 (patch)
tree22e4ee7fb9b558d2e910301b78f455ba881ac203
parentaed378e8d117bf58f6e04c7e97ed30b08db5055d (diff)
downloadpostgresql-43568d11ad5f6ee456d8e7239b3e42f1bdc27bc2.tar.gz
postgresql-43568d11ad5f6ee456d8e7239b3e42f1bdc27bc2.zip
Fix memory leakage when sending notice messages to client.
-rw-r--r--src/backend/utils/error/elog.c42
1 files changed, 11 insertions, 31 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 2766205c049..4e1ab2684c2 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.88 2001/08/06 21:55:13 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.89 2001/10/18 23:07:29 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -63,11 +63,13 @@ bool Log_pid;
static const char *print_timestamp(void);
static const char *print_pid(void);
-static void send_notice_to_frontend(const char *msg);
-static void send_error_to_frontend(const char *msg);
+static void send_message_to_frontend(int type, const char *msg);
static const char *useful_strerror(int errnum);
static const char *elog_message_prefix(int lev);
+#define send_notice_to_frontend(msg) send_message_to_frontend(NOTICE, msg)
+#define send_error_to_frontend(msg) send_message_to_frontend(ERROR, msg)
+
static int Debugfile = -1;
@@ -667,40 +669,18 @@ write_syslog(int level, const char *line)
#endif /* ENABLE_SYSLOG */
-
-static void
-send_notice_or_error_to_frontend(int type, const char *msg);
-
-
-static void
-send_notice_to_frontend(const char *msg)
-{
- send_notice_or_error_to_frontend(NOTICE, msg);
-}
-
-
-static void
-send_error_to_frontend(const char *msg)
-{
- send_notice_or_error_to_frontend(ERROR, msg);
-}
-
-
static void
-send_notice_or_error_to_frontend(int type, const char *msg)
+send_message_to_frontend(int type, const char *msg)
{
- StringInfo buf;
+ StringInfoData buf;
AssertArg(type == NOTICE || type == ERROR);
- buf = makeStringInfo();
-
- pq_beginmessage(buf);
- pq_sendbyte(buf, type == NOTICE ? 'N' : 'E');
- pq_sendstring(buf, msg);
- pq_endmessage(buf);
+ pq_beginmessage(&buf);
+ pq_sendbyte(&buf, type == NOTICE ? 'N' : 'E');
+ pq_sendstring(&buf, msg);
+ pq_endmessage(&buf);
- pfree(buf);
/*
* This flush is normally not necessary, since postgres.c will
* flush out waiting data when control returns to the main loop.