summaryrefslogtreecommitdiff
path: root/src/backend/utils/error/elog.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-11-05 03:04:53 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-11-05 03:04:53 +0000
commit48052de722a502408275fa3b7aee7de430265fc0 (patch)
tree88e3bb1280caae1ee6f4e83724a8f3aa65d25353 /src/backend/utils/error/elog.c
parent95af2633c3e3d64a3cc508409a74ef29de25c852 (diff)
downloadpostgresql-48052de722a502408275fa3b7aee7de430265fc0.tar.gz
Repair an error introduced by log_line_prefix patch: it is not acceptable
to assume that the string pointer passed to set_ps_display is good forever. There's no need to anyway since ps_status.c itself saves the string, and we already had an API (get_ps_display) to return it. I believe this explains Jim Nasby's report of intermittent crashes in elog.c when %i format code is in use in log_line_prefix. While at it, repair a previously unnoticed problem: on some platforms such as Darwin, the string returned by get_ps_display was blank-padded to the maximum length, meaning that lock.c's attempt to append " waiting" to it never worked.
Diffstat (limited to 'src/backend/utils/error/elog.c')
-rw-r--r--src/backend/utils/error/elog.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 64403ce9b1..44ebac245c 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -42,7 +42,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.166 2005/11/03 17:11:39 alvherre Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.167 2005/11/05 03:04:52 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -67,6 +67,7 @@
#include "tcop/tcopprot.h"
#include "utils/memutils.h"
#include "utils/guc.h"
+#include "utils/ps_status.h"
/* Global variables */
@@ -1484,19 +1485,26 @@ log_line_prefix(StringInfo buf)
break;
case 'i':
if (MyProcPort)
- appendStringInfo(buf, "%s", MyProcPort->commandTag);
+ {
+ const char *psdisp;
+ int displen;
+
+ psdisp = get_ps_display(&displen);
+ appendStringInfo(buf, "%.*s", displen, psdisp);
+ }
break;
case 'r':
- if (MyProcPort)
+ if (MyProcPort && MyProcPort->remote_host)
{
appendStringInfo(buf, "%s", MyProcPort->remote_host);
- if (strlen(MyProcPort->remote_port) > 0)
+ if (MyProcPort->remote_port &&
+ MyProcPort->remote_port[0] != '\0')
appendStringInfo(buf, "(%s)",
MyProcPort->remote_port);
}
break;
case 'h':
- if (MyProcPort)
+ if (MyProcPort && MyProcPort->remote_host)
appendStringInfo(buf, "%s", MyProcPort->remote_host);
break;
case 'q':