From 9bffaade96ffc867afe81160d64ac287a971e330 Mon Sep 17 00:00:00 2001
From: "Marc G. Fournier" <scrappy@hub.org>
Date: Fri, 19 Jul 1996 06:13:58 +0000
Subject: [PATCH] Fixes:

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    |  7 +++++--
 src/backend/utils/error/elog.c | 11 +++++++----
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 53203521356..7211bc19283 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.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 $");
     }
     
     /* ----------------
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index bf7d15e5582..74b2edaa7b1 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -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.,
-- 
GitLab