diff options
author | Marc G. Fournier <scrappy@hub.org> | 1996-07-19 06:13:58 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1996-07-19 06:13:58 +0000 |
commit | 9bffaade96ffc867afe81160d64ac287a971e330 (patch) | |
tree | f9f41909b5e95c7a2806eabafd05462e2ac3a27b | |
parent | 64bfa0487b3df4c92cb570ba632c5b4da4b48cbc (diff) | |
download | postgresql-9bffaade96ffc867afe81160d64ac287a971e330.tar.gz postgresql-9bffaade96ffc867afe81160d64ac287a971e330.zip |
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>
-rw-r--r-- | src/backend/tcop/postgres.c | 7 | ||||
-rw-r--r-- | 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., |