From ea838234374ae1eae07dc6c3bfba44d5bc5f159b Mon Sep 17 00:00:00 2001 From: Sait Talha Nisanci Date: Mon, 13 Jul 2020 22:35:23 +0300 Subject: [PATCH] show backtrace in assert failure and not abort --- src/backend/distributed/utils/backtrace.c | 6 +++++- src/include/distributed/backtrace.h | 1 + src/include/distributed/log_utils.h | 10 ++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/utils/backtrace.c b/src/backend/distributed/utils/backtrace.c index 4ec074d90..4e539a4e2 100644 --- a/src/backend/distributed/utils/backtrace.c +++ b/src/backend/distributed/utils/backtrace.c @@ -8,7 +8,6 @@ #include "postgres.h" #include "backtrace.h" -// #include "backtrace-supported.h" #include "lib/stringinfo.h" #include "distributed/backtrace.h" @@ -54,6 +53,11 @@ Backtrace(int elevel) errdetail("%s", GenerateBackTrace()); } +void AssertBacktrace(void) { + const char * backtrace = GenerateBackTrace(); + ereport(ERROR, (errmsg("%s", backtrace))); +} + static char * GenerateBackTrace(void) diff --git a/src/include/distributed/backtrace.h b/src/include/distributed/backtrace.h index e3e9cf1ce..3a81ecdea 100644 --- a/src/include/distributed/backtrace.h +++ b/src/include/distributed/backtrace.h @@ -12,5 +12,6 @@ #define CITUS_BACKTRACE_H void Backtrace(int elevel); +void AssertBacktrace(void); #endif diff --git a/src/include/distributed/log_utils.h b/src/include/distributed/log_utils.h index 80c62b604..200f743b4 100644 --- a/src/include/distributed/log_utils.h +++ b/src/include/distributed/log_utils.h @@ -66,4 +66,14 @@ extern char * HashLogMessage(const char *text); ereport_domain(elevel, TEXTDOMAIN, rest); \ } while (0) +#undef Trap +#define Trap(condition, errorType) \ + do { \ + if (condition) { \ + AssertBacktrace(); \ + ExceptionalCondition(CppAsString(condition), (errorType), \ + __FILE__, __LINE__); \ + } \ + } while (0) + #endif /* LOG_UTILS_H */