diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 33b2a720491e6d8b23e710c8ab78c61e7b131c34..a8d29840095594a08ffb50f5eb35f31eebd6ff0d 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -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);