aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2015-07-27 16:29:14 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2015-07-27 16:29:14 -0400
commit4c8f8ffaca42bb5678a0858ce56f9a384c21c583 (patch)
treeb3f5eec46fa3ca673531db61e9afacb2013c4748
parent7d791ed49be28f2dfdd31e262dc35c4595718267 (diff)
downloadpostgresql-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.
-rw-r--r--src/backend/postmaster/pgstat.c65
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;