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 */