Browse Source
Bug#37003 Tests sporadically crashes with embedded server
Bug#37003 Tests sporadically crashes with embedded server
The problem was that when a embedded linked version of mysqltest crashed there was no way to obtain a stack trace if no core file is available. Another problem is that the embedded version of libmysql was not behaving (crash) the same as the non-embedded with respect to sending commands to a explicitly closed connection. The solution is to generate a mysqltest's stack trace on crash and to enable "reconnect" if the connection handle was explicitly closed so the behavior matches the non-embedded one. client/CMakeLists.txt: Link mysys to mysqltest. client/Makefile.am: Link mysys to mysqltest. client/mysqltest.c: Add fatal signal handling with backtracing for Unix and Windows. configure.in: Add check for weak symbols support and remove a spurious word. include/Makefile.am: Add new header with prototype for stack tracing functions. include/my_stacktrace.h: Add new header with prototype for stack tracing functions. libmysqld/CMakeLists.txt: stack tracing is now part of mysys. libmysqld/Makefile.am: stack tracing is now part of mysys. libmysqld/lib_sql.cc: Re-connect if connection was explicitly closed. This is done to match the behavior of the non-embeded libmysql. mysql-test/t/sql_low_priority_updates_func.test: Test expects parallelism between queries that cannot be guaranteed under embedded. mysys/CMakeLists.txt: Add stacktrace to mysys. mysys/Makefile.am: Add stacktrace to mysys. mysys/stacktrace.c: Move stacktrace to mysys and add weak symbol for the C++ name de-mangling function so that it can later be overridden in C++ code. Also add my_ prefix to exported functions. sql/CMakeLists.txt: stacktrace was moved to mysys. sql/Makefile.am: stacktrace was moved to mysys. sql/mysqld.cc: Add my_ prefix to mysys functions.pull/374/head
17 changed files with 227 additions and 115 deletions
-
8client/CMakeLists.txt
-
12client/Makefile.am
-
92client/mysqltest.c
-
12configure.in
-
2include/Makefile.am
-
61include/my_stacktrace.h
-
3libmysqld/CMakeLists.txt
-
2libmysqld/Makefile.am
-
9libmysqld/lib_sql.cc
-
1mysql-test/t/sql_low_priority_updates_func.test
-
2mysys/CMakeLists.txt
-
2mysys/Makefile.am
-
47mysys/stacktrace.c
-
2sql/CMakeLists.txt
-
4sql/Makefile.am
-
14sql/mysqld.cc
-
69sql/stacktrace.h
@ -0,0 +1,61 @@ |
|||
/* 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 */ |
|||
|
|||
#ifndef _my_stacktrace_h_ |
|||
#define _my_stacktrace_h_ |
|||
|
|||
#include <my_global.h> |
|||
|
|||
#ifdef TARGET_OS_LINUX |
|||
#if defined (__x86_64__) || defined (__i386__) || \ |
|||
(defined(__alpha__) && defined(__GNUC__)) |
|||
#define HAVE_STACKTRACE 1 |
|||
#endif |
|||
#elif defined(__WIN__) |
|||
#define HAVE_STACKTRACE 1 |
|||
#endif |
|||
|
|||
#if !defined(__NETWARE__) |
|||
#define HAVE_WRITE_CORE |
|||
#endif |
|||
|
|||
#if HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS && \ |
|||
HAVE_CXXABI_H && HAVE_ABI_CXA_DEMANGLE && \ |
|||
HAVE_WEAK_SYMBOL |
|||
#define BACKTRACE_DEMANGLE 1 |
|||
#endif |
|||
|
|||
C_MODE_START |
|||
|
|||
#if defined(HAVE_STACKTRACE) || defined(HAVE_BACKTRACE) |
|||
void my_init_stacktrace(); |
|||
void my_print_stacktrace(uchar* stack_bottom, ulong thread_stack); |
|||
void my_safe_print_str(const char* name, const char* val, int max_len); |
|||
void my_write_core(int sig); |
|||
#if BACKTRACE_DEMANGLE |
|||
char *my_demangle(const char *mangled_name, int *status); |
|||
#endif |
|||
#ifdef __WIN__ |
|||
void my_set_exception_pointers(EXCEPTION_POINTERS *ep); |
|||
#endif |
|||
#endif |
|||
|
|||
#ifdef HAVE_WRITE_CORE |
|||
void my_write_core(int sig); |
|||
#endif |
|||
|
|||
C_MODE_END |
|||
|
|||
#endif /* _my_stacktrace_h_ */ |
@ -1,69 +0,0 @@ |
|||
/* 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 |
|||
|
|||
#if HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS && HAVE_CXXABI_H && HAVE_ABI_CXA_DEMANGLE |
|||
#define BACKTRACE_DEMANGLE 1 |
|||
#endif |
|||
|
|||
#if BACKTRACE_DEMANGLE |
|||
char *my_demangle(const char *mangled_name, int *status); |
|||
#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; \ |
|||
} 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(uchar* 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 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue