abort();
}
-#define __ABORT_NOW(file, line, ...) do { \
- extern ssize_t write(int, const void *, size_t); \
- extern size_t strlen(const char *s); \
- const char *msg; \
- if (sizeof("" __VA_ARGS__) > 1) \
- complain(NULL, "\nABORT at " file ":" #line ": " __VA_ARGS__ "\n", 1); \
- ha_backtrace_to_stderr(); \
- msg = "\n" \
- "Hint: when reporting this bug to developers, please check if a core file was\n" \
- " produced, open it with 'gdb', issue 'bt' to produce a backtrace for the\n" \
- " current thread only, then join it with the bug report.\n"; \
- DISGUISE(write(2, msg, strlen(msg))); \
- abort_with_line(__LINE__); \
- } while (0)
#else
+
/* More efficient than abort() because it does not mangle the
* stack and stops at the exact location we need.
*/
+#define abort_with_line(...) ha_crash_now()
+
+#endif
+
#define __ABORT_NOW(file, line, ...) do { \
extern ssize_t write(int, const void *, size_t); \
extern size_t strlen(const char *s); \
" produced, open it with 'gdb', issue 'bt' to produce a backtrace for the\n" \
" current thread only, then join it with the bug report.\n"; \
DISGUISE(write(2, msg, strlen(msg))); \
- ha_crash_now(); \
+ abort_with_line(__LINE__); \
} while (0)
-#endif
#if !defined(USE_OBSOLETE_LINKER)