From b42e37bcde1ecd4bee3bd0c05f5f5706f8febfd6 Mon Sep 17 00:00:00 2001 From: "Thomas G. Lockhart" Date: Mon, 10 Nov 1997 15:24:56 +0000 Subject: [PATCH] Change quickdie elog notice to a single message. Clean up FloatExceptionHandler elog message source code. --- src/backend/tcop/postgres.c | 26 ++++++++++-------- src/backend/tcop/variable.c | 55 +++++++++++++++++++++++++++---------- 2 files changed, 54 insertions(+), 27 deletions(-) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 0d3daabe8d..7659d90275 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.53 1997/11/09 04:47:09 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.54 1997/11/10 15:24:55 thomas Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -728,8 +728,9 @@ pg_eval_dest(char *query_string,/* string to execute */ * handle_warn() is used to catch kill(getpid(),1) which * occurs when elog(WARN) is called. * - * quickdie() occurs when signalled by the postmaster, some backend - * has bought the farm we need to stop what we're doing and exit. + * quickdie() occurs when signalled by the postmaster. + * Some backend has bought the farm, + * so we need to stop what we're doing and exit. * * die() preforms an orderly cleanup via ExitPostgres() * -------------------------------- @@ -744,12 +745,12 @@ handle_warn(SIGNAL_ARGS) static void quickdie(SIGNAL_ARGS) { - elog(NOTICE, "Message from PostgreSQL backend: The Postmaster has "); - elog(NOTICE, "informed me that some other backend died abnormally and "); - elog(NOTICE, "possibly corrupted shared memory. I have rolled back "); - elog(NOTICE, "the current transaction and am going to terminate your "); - elog(NOTICE, "database system connection and exit. Please reconnect to"); - elog(NOTICE, "the database system and repeat your query."); + elog(NOTICE, "Message from PostgreSQL backend:" + "\n\tThe Postmaster has informed me that some other backend" + " died abnormally and possibly corrupted shared memory." + "\n\tI have rolled back the current transaction and am" + " going to terminate your database system connection and exit." + "\n\tPlease reconnect to the database system and repeat your query."); /* @@ -771,8 +772,9 @@ die(SIGNAL_ARGS) static void FloatExceptionHandler(SIGNAL_ARGS) { - elog(WARN, "floating point exception! the last floating point operation eit\ -her exceeded legal ranges or was a divide by zero"); + elog(WARN, "floating point exception!" + " The last floating point operation either exceeded legal ranges" + " or was a divide by zero"); } @@ -1339,7 +1341,7 @@ PostgresMain(int argc, char *argv[]) if (IsUnderPostmaster == false) { puts("\nPOSTGRES backend interactive interface"); - puts("$Revision: 1.53 $ $Date: 1997/11/09 04:47:09 $"); + puts("$Revision: 1.54 $ $Date: 1997/11/10 15:24:55 $"); } /* ---------------- diff --git a/src/backend/tcop/variable.c b/src/backend/tcop/variable.c index 26d4096828..aaf504b2ac 100644 --- a/src/backend/tcop/variable.c +++ b/src/backend/tcop/variable.c @@ -2,7 +2,7 @@ * Routines for handling of 'SET var TO', * 'SHOW var' and 'RESET var' statements. * - * $Id: variable.c,v 1.19 1997/11/07 06:43:16 thomas Exp $ + * $Id: variable.c,v 1.20 1997/11/10 15:24:56 thomas Exp $ * */ @@ -431,8 +431,13 @@ reset_date() return TRUE; } +/* Timezone support + * Working storage for strings is allocated with an arbitrary size of 64 bytes. + */ + static char *defaultTZ = NULL; -static char TZvalue[10]; +static char TZvalue[64]; +static char tzbuf[64]; bool parse_timezone(const char *value) @@ -447,20 +452,30 @@ parse_timezone(const char *value) while ((value = get_token(&tok, NULL, value)) != 0) { - if ((defaultTZ == NULL) && (getenv("TZ") != NULL)) + /* Not yet tried to save original value from environment? */ + if (defaultTZ == NULL) { - defaultTZ = getenv("TZ"); - if (defaultTZ == NULL) + /* found something? then save it for later */ + if (getenv("TZ") != NULL) { - defaultTZ = (char *) -1; + defaultTZ = getenv("TZ"); + if (defaultTZ == NULL) + defaultTZ = (char *) -1; + else + strcpy(TZvalue, defaultTZ); } + /* found nothing so mark with an invalid pointer */ else { - strcpy(TZvalue, defaultTZ); + defaultTZ = (char *) -1; } } - setenv("TZ", tok, TRUE); + strcpy(tzbuf, "TZ="); + strcat(tzbuf, tok); + if (putenv(tzbuf) != 0) + elog(WARN, "Unable to set TZ environment variable to %s", tok); + tzset(); PFREE(tok); } @@ -471,29 +486,39 @@ parse_timezone(const char *value) bool show_timezone() { - char buf[64]; char *tz; tz = getenv("TZ"); - strcpy(buf, "Time zone is "); - strcat(buf, ((tz != NULL)? tz: "unknown")); - - elog(NOTICE, buf, NULL); + elog(NOTICE, "Time zone is %s", ((tz != NULL)? tz: "unknown")); return TRUE; } /* show_timezone() */ +/* reset_timezone() + * Set TZ environment variable to original value. + * Note that if TZ was originally not set, TZ should be cleared. + * unsetenv() works fine, but is BSD, not POSIX, and is not available + * under Solaris, among others. Apparently putenv() called as below + * clears the process-specific environment variables. + * Other reasonable arguments to putenv() (e.g. "TZ=", "TZ", "") result + * in a core dump (under Linux anyway). + */ bool reset_timezone() { if ((defaultTZ != NULL) && (defaultTZ != (char *) -1)) { - setenv("TZ", TZvalue, TRUE); + strcpy(tzbuf, "TZ="); + strcat(tzbuf, TZvalue); + if (putenv(tzbuf) != 0) + elog(WARN, "Unable to set TZ environment variable to %s", TZvalue); } else { - unsetenv("TZ"); + strcpy(tzbuf, "="); + if (putenv(tzbuf) != 0) + elog(WARN, "Unable to clear TZ environment variable", NULL); } tzset(); -- 2.40.0