From a820b4c32946c499a2d19846123840a0dad071b5 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Wed, 11 Apr 2018 23:39:48 +0300 Subject: [PATCH] Make local copy of client hostnames in backend status array. The other strings, application_name and query string, were snapshotted to local memory in pgstat_read_current_status(), but we forgot to do that for client hostnames. As a result, the client hostname would appear to change in the local copy, if the client disconnected. Backpatch to all supported versions. Author: Edmund Horner Reviewed-by: Michael Paquier Discussion: https://www.postgresql.org/message-id/CAMyN-kA7aOJzBmrYFdXcc7Z0NmW%2B5jBaf_m%3D_-77uRNyKC9r%3DA%40mail.gmail.com --- src/backend/postmaster/pgstat.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 96ba216387..2c224ab97d 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -3224,6 +3224,7 @@ pgstat_read_current_status(void) LocalPgBackendStatus *localtable; LocalPgBackendStatus *localentry; char *localappname, + *localclienthostname, *localactivity; #ifdef USE_SSL PgBackendSSLStatus *localsslstatus; @@ -3242,6 +3243,9 @@ pgstat_read_current_status(void) localappname = (char *) MemoryContextAlloc(pgStatLocalContext, NAMEDATALEN * NumBackendStatSlots); + localclienthostname = (char *) + MemoryContextAlloc(pgStatLocalContext, + NAMEDATALEN * NumBackendStatSlots); localactivity = (char *) MemoryContextAlloc(pgStatLocalContext, pgstat_track_activity_query_size * NumBackendStatSlots); @@ -3282,6 +3286,8 @@ pgstat_read_current_status(void) */ strcpy(localappname, (char *) beentry->st_appname); localentry->backendStatus.st_appname = localappname; + strcpy(localclienthostname, (char *) beentry->st_clienthostname); + localentry->backendStatus.st_clienthostname = localclienthostname; strcpy(localactivity, (char *) beentry->st_activity_raw); localentry->backendStatus.st_activity_raw = localactivity; localentry->backendStatus.st_ssl = beentry->st_ssl; @@ -3313,6 +3319,7 @@ pgstat_read_current_status(void) localentry++; localappname += NAMEDATALEN; + localclienthostname += NAMEDATALEN; localactivity += pgstat_track_activity_query_size; #ifdef USE_SSL localsslstatus++; -- 2.40.0