From 4c8f8ffaca42bb5678a0858ce56f9a384c21c583 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 27 Jul 2015 16:29:14 -0400 Subject: [PATCH] Further code review for pg_stat_ssl patch. Fix additional bogosity in commit 9029f4b37406b21a. Include the BackendSslStatusBuffer in the BackendStatusShmemSize calculation, avoid ugly and error-prone casts to char* and back, put related code stanzas into a consistent order (and fix a couple of previous instances of that sin). All cosmetic except for the size oversight. --- src/backend/postmaster/pgstat.c | 65 +++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 887095def0..ab018c4741 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -2478,8 +2478,8 @@ pgstat_fetch_global(void) static PgBackendStatus *BackendStatusArray = NULL; static PgBackendStatus *MyBEEntry = NULL; -static char *BackendClientHostnameBuffer = NULL; static char *BackendAppnameBuffer = NULL; +static char *BackendClientHostnameBuffer = NULL; static char *BackendActivityBuffer = NULL; static Size BackendActivityBufferSize = 0; #ifdef USE_SSL @@ -2495,13 +2495,22 @@ BackendStatusShmemSize(void) { Size size; + /* BackendStatusArray: */ size = mul_size(sizeof(PgBackendStatus), MaxBackends); + /* BackendAppnameBuffer: */ + size = add_size(size, + mul_size(NAMEDATALEN, MaxBackends)); + /* BackendClientHostnameBuffer: */ size = add_size(size, mul_size(NAMEDATALEN, MaxBackends)); + /* BackendActivityBuffer: */ size = add_size(size, mul_size(pgstat_track_activity_query_size, MaxBackends)); +#ifdef USE_SSL + /* BackendSslStatusBuffer: */ size = add_size(size, - mul_size(NAMEDATALEN, MaxBackends)); + mul_size(sizeof(PgBackendSSLStatus), MaxBackends)); +#endif return size; } @@ -2566,26 +2575,6 @@ CreateSharedBackendStatus(void) } } -#ifdef USE_SSL - /* Create or attach to the shared SSL status buffer */ - size = mul_size(sizeof(PgBackendSSLStatus), MaxBackends); - BackendSslStatusBuffer = (PgBackendSSLStatus *) - ShmemInitStruct("Backend SSL Status Buffer", size, &found); - - if (!found) - { - MemSet(BackendSslStatusBuffer, 0, size); - - /* Initialize st_sslstatus pointers. */ - buffer = (char *) BackendSslStatusBuffer; - for (i = 0; i < MaxBackends; i++) - { - BackendStatusArray[i].st_sslstatus = (PgBackendSSLStatus *) buffer; - buffer += sizeof(PgBackendSSLStatus); - } - } -#endif - /* Create or attach to the shared activity buffer */ BackendActivityBufferSize = mul_size(pgstat_track_activity_query_size, MaxBackends); @@ -2606,6 +2595,28 @@ CreateSharedBackendStatus(void) buffer += pgstat_track_activity_query_size; } } + +#ifdef USE_SSL + /* Create or attach to the shared SSL status buffer */ + size = mul_size(sizeof(PgBackendSSLStatus), MaxBackends); + BackendSslStatusBuffer = (PgBackendSSLStatus *) + ShmemInitStruct("Backend SSL Status Buffer", size, &found); + + if (!found) + { + PgBackendSSLStatus *ptr; + + MemSet(BackendSslStatusBuffer, 0, size); + + /* Initialize st_sslstatus pointers. */ + ptr = BackendSslStatusBuffer; + for (i = 0; i < MaxBackends; i++) + { + BackendStatusArray[i].st_sslstatus = ptr; + ptr++; + } + } +#endif } @@ -2932,11 +2943,11 @@ pgstat_read_current_status(void) volatile PgBackendStatus *beentry; LocalPgBackendStatus *localtable; LocalPgBackendStatus *localentry; + char *localappname, + *localactivity; #ifdef USE_SSL PgBackendSSLStatus *localsslstatus; #endif - char *localappname, - *localactivity; int i; Assert(!pgStatRunningInCollector); @@ -2951,15 +2962,15 @@ pgstat_read_current_status(void) localappname = (char *) MemoryContextAlloc(pgStatLocalContext, NAMEDATALEN * MaxBackends); + localactivity = (char *) + MemoryContextAlloc(pgStatLocalContext, + pgstat_track_activity_query_size * MaxBackends); #ifdef USE_SSL localsslstatus = (PgBackendSSLStatus *) MemoryContextAlloc(pgStatLocalContext, sizeof(PgBackendSSLStatus) * MaxBackends); #endif - localactivity = (char *) - MemoryContextAlloc(pgStatLocalContext, - pgstat_track_activity_query_size * MaxBackends); localNumBackends = 0; beentry = BackendStatusArray; -- GitLab