]> granicus.if.org Git - postgresql/commitdiff
Fixes:
authorMarc G. Fournier <scrappy@hub.org>
Fri, 19 Jul 1996 06:13:58 +0000 (06:13 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Fri, 19 Jul 1996 06:13:58 +0000 (06:13 +0000)
This is a patch to prevent an endless loop occuring in the Postgres backend
when a 'warning' error condition generates another warning error contition
in the handler code.

Submitted by: Chris Dunlop, <chris@onthe.net.au>

src/backend/tcop/postgres.c
src/backend/utils/error/elog.c

index 532035213566ce305f5f1698005e7b4355dc5c6d..7211bc192832048bdf493ec7a0624a8fb76d97ef 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.2 1996/07/15 19:22:17 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.3 1996/07/19 06:13:42 scrappy Exp $
  *
  * NOTES
  *    this is the "main" module of the postgres backend and
@@ -111,6 +111,7 @@ jmp_buf    Warn_restart;
 #else
 sigjmp_buf Warn_restart;
 #endif /*defined(WIN32) || defined(PORTNAME_next) */
+int InWarn;
 
 extern int     NBuffers;
 
@@ -1203,6 +1204,7 @@ PostgresMain(int argc, char *argv[])
 #else
     if (setjmp(Warn_restart) != 0) {
 #endif /* WIN32 */
+       InWarn = 1;
 
        time(&tim);
        
@@ -1213,6 +1215,7 @@ PostgresMain(int argc, char *argv[])
        
        AbortCurrentTransaction();
     }
+    InWarn = 0;
     
     /* ----------------
      * POSTGRES main processing loop begins here
@@ -1220,7 +1223,7 @@ PostgresMain(int argc, char *argv[])
      */
     if (IsUnderPostmaster == false) {
        puts("\nPOSTGRES backend interactive interface");
-       puts("$Revision: 1.2 $ $Date: 1996/07/15 19:22:17 $");
+       puts("$Revision: 1.3 $ $Date: 1996/07/19 06:13:42 $");
     }
     
     /* ----------------
index bf7d15e5582ccd8705ad3bcc2fba4c7e47ef2067..74b2edaa7b12960aa68d89df713ca2f3e1af8ae7 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.2 1996/07/16 07:13:47 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.3 1996/07/19 06:13:58 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -150,13 +150,16 @@ elog(int lev, char *fmt, ... )
 #endif /* !PG_STANDALONE */
     
     if (lev == WARN) {
+        extern int InWarn;
        ProcReleaseSpins(NULL); /* get rid of spinlocks we hold */
+        if (!InWarn) {
 #ifndef WIN32
-       kill(getpid(), 1);      /* abort to traffic cop */
-       pause();
+           kill(getpid(), 1);  /* abort to traffic cop */
+           pause();
 #else
-       longjmp(Warn_restart, 1);
+           longjmp(Warn_restart, 1);
 #endif /* WIN32 */
+        }
        /*
         * The pause(3) is just to avoid race conditions where the
         * thread of control on an MP system gets past here (i.e.,