Re: BUG #18374: Printing memory contexts on OOM condition might lead to segmentation fault

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: BUG #18374: Printing memory contexts on OOM condition might lead to segmentation fault
Дата
Msg-id 3120721.1709395887@sss.pgh.pa.us
обсуждение исходный текст
Ответ на BUG #18374: Printing memory contexts on OOM condition might lead to segmentation fault  (PG Bug reporting form <noreply@postgresql.org>)
Ответы Re: BUG #18374: Printing memory contexts on OOM condition might lead to segmentation fault  (Alexander Lakhin <exclusion@gmail.com>)
Список pgsql-bugs
PG Bug reporting form <noreply@postgresql.org> writes:
> When a backend with deeply nested memory contexts hits out-of-memory
> condition and logs the contexts, it might lead to a segmentation fault
> (due to the lack of free memory again).

Hmph.  That's not an out-of-memory crash, that's a stack-too-deep
crash.

Seems like we ought to do one or both of these:

1. Put a CHECK_STACK_DEPTH() call in MemoryContextStatsInternal.

2. Teach MemoryContextStatsInternal to refuse to recurse more
than N levels, for N perhaps around 100.

Neither of these are very attractive though, as they'd obscure
the OOM situation that we're trying to help debug.

It strikes me that we don't actually need recursion in order to
traverse the context tree: since the nodes have parent pointers,
it'd be possible to visit them all using only iteration.  The
recursion seems necessary though to manage the child summarization
logic as we have it (in particular, we must have a local_totals
per level to produce summarization like this).  Maybe we could
modify solution #2 into

2a. Once we get more than say 100 levels deep, summarize everything
below that in a single line, obtained in an iterative rather than
recursive traversal.

I wonder whether MemoryContextDelete and other cleanup methods
also need to be rewritten to avoid recursion.  In the infinite_recurse
test case I think we escape trouble because we longjmp out of most
of the stack before we try to clean up --- but you could probably
devise a test case that tries to do a subtransaction abort at a
deep call level, and then maybe kaboom?

            regards, tom lane



В списке pgsql-bugs по дате отправления:

Предыдущее
От: PG Bug reporting form
Дата:
Сообщение: BUG #18374: Printing memory contexts on OOM condition might lead to segmentation fault
Следующее
От: Alexander Lakhin
Дата:
Сообщение: Re: BUG #18374: Printing memory contexts on OOM condition might lead to segmentation fault