Skip to content

Commit e83bee8

Browse files
committed
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 4a25bc1), so back-patch to 9.1.
1 parent 7ef17dd commit e83bee8

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

src/backend/postmaster/pgstat.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2458,7 +2458,11 @@ pgstat_bestart(void)
24582458
beentry->st_databaseid = MyDatabaseId;
24592459
beentry->st_userid = userid;
24602460
beentry->st_clientaddr = clientaddr;
2461-
beentry->st_clienthostname[0] = '\0';
2461+
if (MyProcPort && MyProcPort->remote_hostname)
2462+
strlcpy(beentry->st_clienthostname, MyProcPort->remote_hostname,
2463+
NAMEDATALEN);
2464+
else
2465+
beentry->st_clienthostname[0] = '\0';
24622466
beentry->st_waiting = false;
24632467
beentry->st_state = STATE_UNDEFINED;
24642468
beentry->st_appname[0] = '\0';
@@ -2471,9 +2475,6 @@ pgstat_bestart(void)
24712475
beentry->st_changecount++;
24722476
Assert((beentry->st_changecount & 1) == 0);
24732477

2474-
if (MyProcPort && MyProcPort->remote_hostname)
2475-
strlcpy(beentry->st_clienthostname, MyProcPort->remote_hostname, NAMEDATALEN);
2476-
24772478
/* Update app name to current GUC setting */
24782479
if (application_name)
24792480
pgstat_report_appname(application_name);

src/backend/utils/adt/pgstatfuncs.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,8 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
723723
clean_ipv6_addr(beentry->st_clientaddr.addr.ss_family, remote_host);
724724
values[11] = DirectFunctionCall1(inet_in,
725725
CStringGetDatum(remote_host));
726-
if (beentry->st_clienthostname)
726+
if (beentry->st_clienthostname &&
727+
beentry->st_clienthostname[0])
727728
values[12] = CStringGetTextDatum(beentry->st_clienthostname);
728729
else
729730
nulls[12] = true;

0 commit comments

Comments
 (0)