Hello all,

I am going to refactor Greenplum backtraces for error messages and want to make 
it more compatible with PostgreSQL code. Backtraces in PostgreSQL were 
introduced by 71a8a4f6e36547bb060dbcc961ea9b57420f7190 commit (original 
discussion 
https://www.postgresql.org/message-id/CAMsr+YGL+yfWE=jvbubnpwtrrzney7hj07+zt4byjdvp4sz...@mail.gmail.com
 ) and rely on backtrace() and backtrace_symbols() functions. They are used 
inside errfinish() that is wrapped by ereport() macros. ereport() is invoked 
inside bgworker_die() and FloatExceptionHandler() signal handlers. I am 
confused with this fact - both backtrace functions are async-unsafe: 
backtrace_symbols() - always, backtrace() - only for the first call due to 
dlopen. I wonder why does PostgreSQL use async-unsafe functions in signal 
handlers?

Best regards,
Denis Smirnov | Developer
s...@arenadata.io 
Arenadata | Godovikova 9-17, Moscow 129085 Russia



Reply via email to