Make local copy of client hostnames in backend status array.
authorHeikki Linnakangas
Wed, 11 Apr 2018 20:39:48 +0000 (23:39 +0300)
committerHeikki Linnakangas
Wed, 11 Apr 2018 20:40:27 +0000 (23:40 +0300)
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

index 189381f4a68617d91e072354f4448512140c885e..64b32d8578a799076c4888ea2ddffdb09d938214 100644 (file)
@@ -2842,6 +2842,7 @@ pgstat_read_current_status(void)
    LocalPgBackendStatus *localtable;
    LocalPgBackendStatus *localentry;
    char       *localappname,
+              *localclienthostname,
               *localactivity;
    int         i;
 
@@ -2857,6 +2858,9 @@ pgstat_read_current_status(void)
    localappname = (char *)
        MemoryContextAlloc(pgStatLocalContext,
                           NAMEDATALEN * MaxBackends);
+   localclienthostname = (char *)
+       MemoryContextAlloc(pgStatLocalContext,
+                          NAMEDATALEN * MaxBackends);
    localactivity = (char *)
        MemoryContextAlloc(pgStatLocalContext,
                           pgstat_track_activity_query_size * MaxBackends);
@@ -2888,6 +2892,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);
                localentry->backendStatus.st_activity = localactivity;
            }
@@ -2910,6 +2916,7 @@ pgstat_read_current_status(void)
 
            localentry++;
            localappname += NAMEDATALEN;
+           localclienthostname += NAMEDATALEN;
            localactivity += pgstat_track_activity_query_size;
            localNumBackends++;
        }