aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2014-04-01 21:30:18 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2014-04-01 21:30:18 -0400
commit2b5206901111db6dc8c6b9af0c4fde681c30e906 (patch)
treef7b7c3c6546b18da89f86e60859115a21f523406 /src
parentb924d4cdc0a95c6af0a57d4e78dbd3d7f1b39775 (diff)
downloadpostgresql-2b5206901111db6dc8c6b9af0c4fde681c30e906.tar.gz
postgresql-2b5206901111db6dc8c6b9af0c4fde681c30e906.zip
Fix bugs in manipulation of PgBackendStatus.st_clienthostname.
Initialization of this field was not being done according to the st_changecount protocol (it has to be done within the changecount increment range, not outside). And the test to see if the value should be reported as null was wrong. Noted while perusing uses of Port.remote_hostname. This was wrong from the introduction of this code (commit 4a25bc145), so back-patch to 9.1.
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/pgstat.c9
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c3
2 files changed, 7 insertions, 5 deletions
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c
index 77e195e554d..e1e60294ea0 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -2404,7 +2404,11 @@ pgstat_bestart(void)
beentry->st_databaseid = MyDatabaseId;
beentry->st_userid = userid;
beentry->st_clientaddr = clientaddr;
- beentry->st_clienthostname[0] = '\0';
+ if (MyProcPort && MyProcPort->remote_hostname)
+ strlcpy(beentry->st_clienthostname, MyProcPort->remote_hostname,
+ NAMEDATALEN);
+ else
+ beentry->st_clienthostname[0] = '\0';
beentry->st_waiting = false;
beentry->st_appname[0] = '\0';
beentry->st_activity[0] = '\0';
@@ -2416,9 +2420,6 @@ pgstat_bestart(void)
beentry->st_changecount++;
Assert((beentry->st_changecount & 1) == 0);
- if (MyProcPort && MyProcPort->remote_hostname)
- strlcpy(beentry->st_clienthostname, MyProcPort->remote_hostname, NAMEDATALEN);
-
/* Update app name to current GUC setting */
if (application_name)
pgstat_report_appname(application_name);
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index c75b9420264..e0ec08e4b47 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -694,7 +694,8 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
clean_ipv6_addr(beentry->st_clientaddr.addr.ss_family, remote_host);
values[9] = DirectFunctionCall1(inet_in,
CStringGetDatum(remote_host));
- if (beentry->st_clienthostname)
+ if (beentry->st_clienthostname &&
+ beentry->st_clienthostname[0])
values[10] = CStringGetTextDatum(beentry->st_clienthostname);
else
nulls[10] = true;