mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-12 18:34:36 +08:00
Fix elog.c to avoid infinite recursion (leading to backend crash) when
log_min_error_statement is active and there is some problem in logging the current query string; for example, that it's too long to include in the log message without running out of memory. This problem has existed since the log_min_error_statement feature was introduced. No doubt the reason it wasn't detected long ago is that 8.2 is the first release that defaults log_min_error_statement to less than PANIC level. Per report from Bill Moran.
This commit is contained in:
parent
85506ffbd5
commit
6537d9ce6a
@ -42,7 +42,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.178.2.3 2007/07/19 19:14:25 adunstan Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.178.2.4 2007/07/21 22:12:11 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -261,10 +261,15 @@ errstart(int elevel, const char *filename, int lineno,
|
||||
|
||||
/*
|
||||
* If we recurse more than once, the problem might be something broken
|
||||
* in a context traceback routine. Abandon them too.
|
||||
* in a context traceback routine. Abandon them too. We also
|
||||
* abandon attempting to print the error statement (which, if long,
|
||||
* could itself be the source of the recursive failure).
|
||||
*/
|
||||
if (recursion_depth > 2)
|
||||
{
|
||||
error_context_stack = NULL;
|
||||
debug_query_string = NULL;
|
||||
}
|
||||
}
|
||||
if (++errordata_stack_depth >= ERRORDATA_STACK_SIZE)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user