Re: Printing backtrace of postgres processes - Mailing list pgsql-hackers

From Andres Freund
Subject Re: Printing backtrace of postgres processes
Date
Msg-id 20201201032649.aekv5b5dicvmovf4@alap3.anarazel.de
Whole thread Raw
In response to Re: Printing backtrace of postgres processes  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Printing backtrace of postgres processes
List pgsql-hackers
Hi,

On 2020-11-22 01:25:08 -0500, Tom Lane wrote:
> Surely this is *utterly* unsafe.  You can't do that sort of stuff in
> a signal handler.

That's of course true for the current implementation - but I don't think
it's a fundamental constraint. With a bit of care backtrace() and
backtrace_symbols() itself can be signal safe:

> backtrace()  and  backtrace_symbols_fd()  don't  call  malloc() explicitly, but they are part of libgcc, which gets
loadeddynamically when first
 
> used.  Dynamic loading usually triggers a call to malloc(3).  If you need certain calls to these two functions to not
allocatememory (in  signal
 
> handlers, for example), you need to make sure libgcc is loaded beforehand.

It should be quite doable to emit such backtraces directly to stderr,
instead of using appendStringInfoString()/elog(). Or even use a static
buffer.

It does have quite some appeal to be able to debug production workloads
where queries can't be cancelled etc. And knowing that backtraces
reliably work in case of SIGQUIT etc is also nice...


> I would like to see some discussion of the security implications
> of such a feature, as well.  ("There aren't any" is the wrong
> answer.)

+1

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: Krunal Bauskar
Date:
Subject: Re: Improving spin-lock implementation on ARM.
Next
From: Andres Freund
Date:
Subject: Re: Printing backtrace of postgres processes