Reconsider context for calling callback functions --- original idea

that they aren't part of error processing is clearly faulty.
This commit is contained in:
Tom Lane 2003-08-03 23:44:44 +00:00
parent 0b96badc9c
commit c1c7b338ee
1 changed files with 11 additions and 13 deletions

View File

@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.115 2003/07/27 21:49:54 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.116 2003/08/03 23:44:44 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -318,12 +318,19 @@ errfinish(int dummy, ...)
MemoryContext oldcontext;
ErrorContextCallback *econtext;
recursion_depth++;
CHECK_STACK_DEPTH();
/*
* Call any context callback functions. We can treat ereports occuring
* in callback functions as re-entrant rather than recursive case, so
* don't increment recursion_depth yet.
* Do processing in ErrorContext, which we hope has enough reserved space
* to report an error.
*/
oldcontext = MemoryContextSwitchTo(ErrorContext);
/*
* Call any context callback functions. Errors occurring in callback
* functions will be treated as recursive errors --- this ensures we
* will avoid infinite recursion (see errstart).
*/
for (econtext = error_context_stack;
econtext != NULL;
@ -332,15 +339,6 @@ errfinish(int dummy, ...)
(*econtext->callback) (econtext->arg);
}
/* Now we are ready to process the error. */
recursion_depth++;
/*
* Do processing in ErrorContext, which we hope has enough reserved space
* to report an error.
*/
oldcontext = MemoryContextSwitchTo(ErrorContext);
/* Send to server log, if enabled */
if (edata->output_to_server)
send_message_to_server_log(edata);