summaryrefslogtreecommitdiff
path: root/lib/common/Box.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/common/Box.h')
-rw-r--r--lib/common/Box.h59
1 files changed, 29 insertions, 30 deletions
diff --git a/lib/common/Box.h b/lib/common/Box.h
index d0e7ab1e..1124a062 100644
--- a/lib/common/Box.h
+++ b/lib/common/Box.h
@@ -17,13 +17,14 @@
#include "BoxPlatform.h"
-// uncomment this line to enable full memory leak finding on all malloc-ed blocks (at least, ones used by the STL)
+// uncomment this line to enable full memory leak finding on all
+// malloc-ed blocks (at least, ones used by the STL)
//#define MEMLEAKFINDER_FULL_MALLOC_MONITORING
-#ifndef NDEBUG
- #ifdef HAVE_EXECINFO_H
- #define SHOW_BACKTRACE_ON_EXCEPTION
- #endif
+// Show backtraces on exceptions in release builds until further notice
+// (they are only logged at TRACE level anyway)
+#ifdef HAVE_EXECINFO_H
+ #define SHOW_BACKTRACE_ON_EXCEPTION
#endif
#ifdef SHOW_BACKTRACE_ON_EXCEPTION
@@ -36,14 +37,23 @@
#include "CommonException.h"
#include "Logging.h"
-#ifndef NDEBUG
+#ifndef BOX_RELEASE_BUILD
extern bool AssertFailuresToSyslog;
#define ASSERT_FAILS_TO_SYSLOG_ON {AssertFailuresToSyslog = true;}
void BoxDebugAssertFailed(const char *cond, const char *file, int line);
- #define ASSERT(cond) {if(!(cond)) {BoxDebugAssertFailed(#cond, __FILE__, __LINE__); THROW_EXCEPTION(CommonException, AssertFailed)}}
+ #define ASSERT(cond) \
+ { \
+ if(!(cond)) \
+ { \
+ BoxDebugAssertFailed(#cond, __FILE__, __LINE__); \
+ THROW_EXCEPTION_MESSAGE(CommonException, \
+ AssertFailed, #cond); \
+ } \
+ }
- // Note that syslog tracing is independent of BoxDebugTraceOn, but stdout tracing is not
+ // Note that syslog tracing is independent of BoxDebugTraceOn,
+ // but stdout tracing is not
extern bool BoxDebugTraceToSyslog;
#define TRACE_TO_SYSLOG(x) {BoxDebugTraceToSyslog = x;}
extern bool BoxDebugTraceToStdout;
@@ -52,15 +62,6 @@
extern bool BoxDebugTraceOn;
int BoxDebug_printf(const char *format, ...);
int BoxDebugTrace(const char *format, ...);
- #define TRACE0(msg) {BoxDebugTrace("%s", msg);}
- #define TRACE1(msg, a0) {BoxDebugTrace(msg, a0);}
- #define TRACE2(msg, a0, a1) {BoxDebugTrace(msg, a0, a1);}
- #define TRACE3(msg, a0, a1, a2) {BoxDebugTrace(msg, a0, a1, a2);}
- #define TRACE4(msg, a0, a1, a2, a3) {BoxDebugTrace(msg, a0, a1, a2, a3);}
- #define TRACE5(msg, a0, a1, a2, a3, a4) {BoxDebugTrace(msg, a0, a1, a2, a3, a4);}
- #define TRACE6(msg, a0, a1, a2, a3, a4, a5) {BoxDebugTrace(msg, a0, a1, a2, a3, a4, a5);}
- #define TRACE7(msg, a0, a1, a2, a3, a4, a5, a6) {BoxDebugTrace(msg, a0, a1, a2, a3, a4, a5, a6);}
- #define TRACE8(msg, a0, a1, a2, a3, a4, a5, a6, a7) {BoxDebugTrace(msg, a0, a1, a2, a3, a4, a5, a6, a7);}
#ifndef PLATFORM_DISABLE_MEM_LEAK_TESTING
#define BOX_MEMORY_LEAK_TESTING
@@ -76,16 +77,6 @@
#define TRACE_TO_SYSLOG(x) {}
#define TRACE_TO_STDOUT(x) {}
- #define TRACE0(msg)
- #define TRACE1(msg, a0)
- #define TRACE2(msg, a0, a1)
- #define TRACE3(msg, a0, a1, a2)
- #define TRACE4(msg, a0, a1, a2, a3)
- #define TRACE5(msg, a0, a1, a2, a3, a4)
- #define TRACE6(msg, a0, a1, a2, a3, a4, a5)
- #define TRACE7(msg, a0, a1, a2, a3, a4, a5, a6)
- #define TRACE8(msg, a0, a1, a2, a3, a4, a5, a6, a7)
-
// Box Backup builds release get extra information for exception logging
#define EXCEPTION_CODENAMES_EXTENDED
#define EXCEPTION_CODENAMES_EXTENDED_WITH_DESCRIPTION
@@ -113,13 +104,21 @@
#define THROW_EXCEPTION(type, subtype) \
{ \
OPTIONAL_DO_BACKTRACE \
- BOX_WARNING("Exception thrown: " #type "(" #subtype ") at " \
- __FILE__ "(" << __LINE__ << ")") \
+ BOX_WARNING("Exception thrown: " #type "(" #subtype ") " \
+ "at " __FILE__ "(" << __LINE__ << ")") \
throw type(type::subtype); \
}
-// extra macros for converting to network byte order
+#define THROW_EXCEPTION_MESSAGE(type, subtype, message) \
+ { \
+ OPTIONAL_DO_BACKTRACE \
+ BOX_WARNING("Exception thrown: " #type "(" #subtype ") " \
+ " (" message ") at " \
+ __FILE__ "(" << __LINE__ << ")") \
+ throw type(type::subtype, message); \
+ }
+// extra macros for converting to network byte order
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif