diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/utils/error/assert.c | 14 | ||||
-rw-r--r-- | src/backend/utils/error/elog.c | 12 |
2 files changed, 21 insertions, 5 deletions
diff --git a/src/backend/utils/error/assert.c b/src/backend/utils/error/assert.c index fd334a1947..a2d455b397 100644 --- a/src/backend/utils/error/assert.c +++ b/src/backend/utils/error/assert.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/error/assert.c,v 1.33 2007/01/05 22:19:43 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/error/assert.c,v 1.34 2007/05/04 02:01:02 tgl Exp $ * * NOTE * This should eventually work with elog() @@ -21,11 +21,14 @@ /* * ExceptionalCondition - Handles the failure of an Assert() + * + * Note: this can't actually return, but we declare it as returning int + * because the TrapMacro() macro might get wonky otherwise. */ int -ExceptionalCondition(char *conditionName, - char *errorType, - char *fileName, +ExceptionalCondition(const char *conditionName, + const char *errorType, + const char *fileName, int lineNumber) { if (!PointerIsValid(conditionName) @@ -39,6 +42,9 @@ ExceptionalCondition(char *conditionName, fileName, lineNumber); } + /* Usually this shouldn't be needed, but make sure the msg went out */ + fflush(stderr); + #ifdef SLEEP_ON_ASSERT /* diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index d74442ee54..93e7663da3 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -42,7 +42,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.184 2007/05/02 15:32:41 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.185 2007/05/04 02:01:02 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1151,6 +1151,16 @@ pg_re_throw(void) errfinish(0); } + + /* We mustn't return... */ + ExceptionalCondition("pg_re_throw tried to return", "FailedAssertion", + __FILE__, __LINE__); + + /* + * Since ExceptionalCondition isn't declared noreturn because of + * TrapMacro(), we need this to keep gcc from complaining. + */ + abort(); } |