diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2015-07-27 16:29:14 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2015-07-27 16:29:14 -0400 |
commit | 4c8f8ffaca42bb5678a0858ce56f9a384c21c583 (patch) | |
tree | b3f5eec46fa3ca673531db61e9afacb2013c4748 /src | |
parent | 7d791ed49be28f2dfdd31e262dc35c4595718267 (diff) | |
download | postgresql-4c8f8ffaca42bb5678a0858ce56f9a384c21c583.tar.gz postgresql-4c8f8ffaca42bb5678a0858ce56f9a384c21c583.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/postmaster/pgstat.c | 65 |
1 files changed, 38 insertions, 27 deletions
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 887095def06..ab018c47414 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; |