mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
721d24124f
- Replace per-thread signal()'s with SetUnhandledExceptionFilter(). The only remaining signal() is for SIGABRT (default abort() handler in VS2005 is broken, i.e removes user exception filter) - remove MessageBox()'es from error handling code - Windows port for print_stacktrace() and write_core() - Cleanup, removed some unused functions sql/CMakeLists.txt: Implement stack tracing on and generating crash dumps on Windows sql/mysqld.cc: Correct signal handling on Windows. - For console events, like CTRL-C use SetConsoleCtrlHandler - For exceptions like access violation, use SetUnhandledExceptionFilter - For SIGABRT generate exception via __debugbreak() intrinsic if built with VS2005 and later , since default SIGABRT handler replaces unhandled exception filter specified by user - make provisions to debug exception filter, as it is not trivial (should be compiled with /DDEBUG_UNHANDLED_EXCEPTION_FILTER) sql/sql_parse.cc: Remove message box from windows signal handler. The only thread specific handler left is for SIGABRT, which is broken on VS2005 and later (user specified unhandled exception filter gets overwritten) sql/stacktrace.c: Stack tracing and generating crash dumps on Windows sql/stacktrace.h: Implement print_stacktrace and write_core on Windows
62 lines
1.9 KiB
C
62 lines
1.9 KiB
C
/* Copyright (C) 2000 MySQL AB
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifdef TARGET_OS_LINUX
|
|
#if defined(HAVE_STACKTRACE) || (defined (__x86_64__) || defined (__i386__) || (defined(__alpha__) && defined(__GNUC__)))
|
|
#undef HAVE_STACKTRACE
|
|
#define HAVE_STACKTRACE
|
|
|
|
extern char* __bss_start;
|
|
extern char* heap_start;
|
|
|
|
#define init_stacktrace() do { \
|
|
heap_start = (char*) &__bss_start; \
|
|
check_thread_lib(); \
|
|
} while(0);
|
|
void check_thread_lib(void);
|
|
#endif /* defined (__i386__) || (defined(__alpha__) && defined(__GNUC__))) */
|
|
#elif defined (__WIN__)
|
|
#define HAVE_STACKTRACE
|
|
extern void set_exception_pointers(EXCEPTION_POINTERS *ep);
|
|
#define init_stacktrace() {}
|
|
#endif
|
|
|
|
#ifdef HAVE_STACKTRACE
|
|
void print_stacktrace(gptr stack_bottom, ulong thread_stack);
|
|
void safe_print_str(const char* name, const char* val, int max_len);
|
|
#else
|
|
/* Define empty prototypes for functions that are not implemented */
|
|
#define init_stacktrace() {}
|
|
#define print_stacktrace(A,B) {}
|
|
#define safe_print_str(A,B,C) {}
|
|
#endif /* HAVE_STACKTRACE */
|
|
|
|
|
|
#if !defined(__NETWARE__)
|
|
#define HAVE_WRITE_CORE
|
|
#endif
|
|
|
|
#ifdef HAVE_WRITE_CORE
|
|
void write_core(int sig);
|
|
#endif
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|