aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2014-04-01 21:30:08 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2014-04-01 21:30:34 -0400
commit682c5bbec5d9533d2d654d6a096c36bbae9f5bd0 (patch)
tree23a40f18ebc4668fab58f0d84f6d85c5052d6796
parent8bbbcb91bae1489471d11fef269533bc4df2f766 (diff)
downloadpostgresql-682c5bbec5d9533d2d654d6a096c36bbae9f5bd0.tar.gz
postgresql-682c5bbec5d9533d2d654d6a096c36bbae9f5bd0.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.
-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 3dc280a48d7..e355cdee953 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -2581,7 +2581,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_state = STATE_UNDEFINED;
beentry->st_appname[0] = '\0';
@@ -2594,9 +2598,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 140704f97ca..bf3084fce67 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -760,7 +760,8 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
clean_ipv6_addr(beentry->st_clientaddr.addr.ss_family, remote_host);
values[11] = DirectFunctionCall1(inet_in,
CStringGetDatum(remote_host));
- if (beentry->st_clienthostname)
+ if (beentry->st_clienthostname &&
+ beentry->st_clienthostname[0])
values[12] = CStringGetTextDatum(beentry->st_clienthostname);
else
nulls[12] = true;