From 1d722cf18c2dd49bcf01698dc1e3bdba44d72afd Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 16 Feb 2007 21:34:04 +0000 Subject: [PATCH] Reduce the amount of memory "clobbered" for every process title change, on platforms that need this. This is done by only writing past the previously stored message, if it was longer. --- src/backend/utils/misc/ps_status.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c index 0ad5e21ebe..9f6774e5f7 100644 --- a/src/backend/utils/misc/ps_status.c +++ b/src/backend/utils/misc/ps_status.c @@ -5,7 +5,7 @@ * to contain some useful information. Mechanism differs wildly across * platforms. * - * $PostgreSQL: pgsql/src/backend/utils/misc/ps_status.c,v 1.34 2007/01/05 22:19:46 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/misc/ps_status.c,v 1.35 2007/02/16 21:34:04 momjian Exp $ * * Copyright (c) 2000-2007, PostgreSQL Global Development Group * various details abducted from various places @@ -91,6 +91,7 @@ static const size_t ps_buffer_size = PS_BUFFER_SIZE; #else /* PS_USE_CLOBBER_ARGV */ static char *ps_buffer; /* will point to argv area */ static size_t ps_buffer_size; /* space determined at run time */ +static size_t last_status_len; /* use to minimize length of clobber */ #endif /* PS_USE_CLOBBER_ARGV */ static size_t ps_buffer_fixed_size; /* size of the constant prefix */ @@ -153,8 +154,8 @@ save_ps_display_args(int argc, char **argv) } ps_buffer = argv[0]; - ps_buffer_size = end_of_area - argv[0]; - + last_status_len = ps_buffer_size = end_of_area - argv[0]; + /* * move the environment out of the way */ @@ -329,7 +330,10 @@ set_ps_display(const char *activity, bool force) /* pad unused memory */ buflen = strlen(ps_buffer); - MemSet(ps_buffer + buflen, PS_PADDING, ps_buffer_size - buflen); + /* clobber remainder of old status string */ + if (last_status_len > buflen) + MemSet(ps_buffer + buflen, PS_PADDING, last_status_len - buflen); + last_status_len = buflen; } #endif /* PS_USE_CLOBBER_ARGV */