Change quickdie elog notice to a single message.
authorThomas G. Lockhart
Mon, 10 Nov 1997 15:24:56 +0000 (15:24 +0000)
committerThomas G. Lockhart
Mon, 10 Nov 1997 15:24:56 +0000 (15:24 +0000)
Clean up FloatExceptionHandler elog message source code.

src/backend/tcop/postgres.c
src/backend/tcop/variable.c

index 0d3daabe8d3fe9ee7576df91748655dc3f27192c..7659d90275cd0a1a4d1c474815bd2c75a8a4f3b0 100644 (file)
@@ -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 $");
    }
 
    /* ----------------
index 26d4096828d650aa9579ed1d63a344b8f49b8f4e..aaf504b2ac7b7ef6d57cee093d467a72758fce09 100644 (file)
@@ -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();