List:Commits« Previous MessageNext Message »
From:Magnus Svensson Date:June 18 2008 4:45pm
Subject:Re: bzr commit into mysql-5.1 branch (davi:2660) Bug#37003
View as plain text  
Ok to push.

Discussed on IRC.

/ Magnus

Davi Arnaut skrev:
> # At a local mysql-5.1 repository of davi
> 
>  2660 Davi Arnaut	2008-06-05
>       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.
> renamed:
>   sql/stacktrace.c => mysys/stacktrace.c
>   sql/stacktrace.h => include/my_stacktrace.h
> modified:
>   client/CMakeLists.txt
>   client/Makefile.am
>   client/mysqltest.c
>   configure.in
>   include/Makefile.am
>   libmysqld/CMakeLists.txt
>   libmysqld/Makefile.am
>   libmysqld/lib_sql.cc
>   mysql-test/t/sql_low_priority_updates_func.test
>   mysys/CMakeLists.txt
>   mysys/Makefile.am
>   sql/CMakeLists.txt
>   sql/Makefile.am
>   sql/mysqld.cc
>   mysys/stacktrace.c
>   include/my_stacktrace.h
> 
> per-file messages:
>   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.
> === modified file 'client/CMakeLists.txt'
> --- a/client/CMakeLists.txt	2008-02-07 13:07:41 +0000
> +++ b/client/CMakeLists.txt	2008-06-05 18:31:12 +0000
> @@ -15,7 +15,7 @@
>  INCLUDE("${PROJECT_SOURCE_DIR}/win/mysql_manifest.cmake")
>  
>  # We use the "mysqlclient_notls" library here just as safety, in case
> -# any of the clients here would go beond the client API and access the
> +# any of the clients here would go beyond the client API and access the
>  # Thread Local Storage directly.
>  
>  SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
> @@ -32,9 +32,9 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/
>  ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc
> ../mysys/my_conio.c)
>  TARGET_LINK_LIBRARIES(mysql mysqlclient_notls wsock32)
>  
> -ADD_EXECUTABLE(mysqltest mysqltest.c ../mysys/my_getsystime.c
> -               ../mysys/my_copy.c ../mysys/my_mkdir.c)
> -TARGET_LINK_LIBRARIES(mysqltest mysqlclient_notls regex wsock32)
> +ADD_EXECUTABLE(mysqltest mysqltest.c)
> +SET_SOURCE_FILES_PROPERTIES(mysqltest.c PROPERTIES COMPILE_FLAGS "-DTHREADS")
> +TARGET_LINK_LIBRARIES(mysqltest mysqlclient mysys regex wsock32 dbug)
>  
>  ADD_EXECUTABLE(mysqlcheck mysqlcheck.c)
>  TARGET_LINK_LIBRARIES(mysqlcheck mysqlclient_notls wsock32)
> 
> === modified file 'client/Makefile.am'
> --- a/client/Makefile.am	2007-11-01 15:49:39 +0000
> +++ b/client/Makefile.am	2008-06-05 18:31:12 +0000
> @@ -86,11 +86,13 @@ mysqlslap_LDADD =		$(CXXLDFLAGS) $(CLIEN
>  				$(LIBMYSQLCLIENT_LA) \
>  				$(top_builddir)/mysys/libmysys.a
>  
> -mysqltest_SOURCES=		mysqltest.c \
> -				$(top_srcdir)/mysys/my_getsystime.c \
> -				$(top_srcdir)/mysys/my_copy.c \
> -                                $(top_srcdir)/mysys/my_mkdir.c
> -mysqltest_LDADD =		$(top_builddir)/regex/libregex.a $(LDADD)
> +mysqltest_SOURCES=		mysqltest.c
> +mysqltest_CFLAGS=		-DTHREAD -UUNDEF_THREADS_HACK
> +mysqltest_LDADD =		$(CXXLDFLAGS) $(CLIENT_THREAD_LIBS) \
> +				@CLIENT_EXTRA_LDFLAGS@ \
> +				$(LIBMYSQLCLIENT_LA) \
> +				$(top_builddir)/mysys/libmysys.a \
> +				$(top_builddir)/regex/libregex.a
>  
>  mysql_upgrade_SOURCES=          mysql_upgrade.c \
>                                  $(top_srcdir)/mysys/my_getpagesize.c
> 
> === modified file 'client/mysqltest.c'
> --- a/client/mysqltest.c	2008-05-06 13:37:36 +0000
> +++ b/client/mysqltest.c	2008-06-05 18:31:12 +0000
> @@ -48,7 +48,14 @@
>  #ifdef __WIN__
>  #include <direct.h>
>  #endif
> +#include <my_stacktrace.h>
>  
> +#ifdef __WIN__
> +#include <crtdbg.h>
> +#define SIGNAL_FMT "exception 0x%x"
> +#else
> +#define SIGNAL_FMT "signal %d"
> +#endif
>  
>  /* Use cygwin for --exec and --system before 5.0 */
>  #if MYSQL_VERSION_ID < 50000
> @@ -214,6 +221,7 @@ struct st_connection
>    /* Used when creating views and sp, to avoid implicit commit */
>    MYSQL* util_mysql;
>    char *name;
> +  size_t name_len;
>    MYSQL_STMT* stmt;
>  
>  #ifdef EMBEDDED_LIBRARY
> @@ -4436,6 +4444,7 @@ void do_connect(struct st_command *comma
>                          ds_connection_name.str));
>      if (!(con_slot->name= my_strdup(ds_connection_name.str, MYF(MY_WME))))
>        die("Out of memory");
> +    con_slot->name_len= strlen(con_slot->name);
>      cur_con= con_slot;
>      
>      if (con_slot == next_con)
> @@ -6839,6 +6848,87 @@ void mark_progress(struct st_command* co
>  }
>  
>  
> +static sig_handler dump_backtrace(int sig)
> +{
> +  struct st_connection *conn= cur_con;
> +
> +  fprintf(stderr, "mysqltest got " SIGNAL_FMT "\n", sig);
> +  my_safe_print_str("read_command_buf", read_command_buf,
> +                    sizeof(read_command_buf));
> +  if (conn)
> +  {
> +    my_safe_print_str("conn->name", conn->name, conn->name_len);
> +#ifdef EMBEDDED_LIBRARY
> +    my_safe_print_str("conn->cur_query", conn->cur_query,
> conn->cur_query_len);
> +#endif
> +  }
> +  fputs("Attempting backtrace...\n", stderr);
> +  my_print_stacktrace(NULL, my_thread_stack_size);
> +}
> +
> +#ifdef __WIN__
> +
> +LONG WINAPI exception_filter(EXCEPTION_POINTERS *exp)
> +{
> +  __try
> +  {
> +    my_set_exception_pointers(exp);
> +    dump_backtrace(exp->ExceptionRecord->ExceptionCode);
> +  }
> +  __except(EXCEPTION_EXECUTE_HANDLER)
> +  {
> +    fputs("Got exception in exception handler!\n", stderr);
> +  }
> +
> +  return EXCEPTION_CONTINUE_SEARCH;
> +}
> +
> +
> +static void init_signal_handling(void)
> +{
> +  UINT mode;
> +
> +  /* Set output destination of messages to the standard error stream. */
> +  _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
> +  _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
> +  _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
> +  _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
> +  _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
> +  _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
> +
> +  /* Do not not display the a error message box. */
> +  mode= SetErrorMode(0) | SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX;
> +  SetErrorMode(mode);
> +
> +  SetUnhandledExceptionFilter(exception_filter);
> +}
> +
> +#else /* __WIN__ */
> +
> +static void init_signal_handling(void)
> +{
> +  struct sigaction sa;
> +  DBUG_ENTER("init_signal_handling");
> +
> +  my_init_stacktrace();
> +
> +  sa.sa_flags = SA_RESETHAND | SA_NODEFER;
> +  sigemptyset(&sa.sa_mask);
> +  sigprocmask(SIG_SETMASK, &sa.sa_mask, NULL);
> +
> +  sa.sa_handler= dump_backtrace;
> +
> +  sigaction(SIGSEGV, &sa, NULL);
> +  sigaction(SIGABRT, &sa, NULL);
> +#ifdef SIGBUS
> +  sigaction(SIGBUS, &sa, NULL);
> +#endif
> +  sigaction(SIGILL, &sa, NULL);
> +  sigaction(SIGFPE, &sa, NULL);
> +}
> +
> +#endif /* !__WIN__ */
> +
>  int main(int argc, char **argv)
>  {
>    struct st_command *command;
> @@ -6851,6 +6941,8 @@ int main(int argc, char **argv)
>    save_file[0]= 0;
>    TMPDIR[0]= 0;
>  
> +  init_signal_handling();
> +
>    /* Init expected errors */
>    memset(&saved_expected_errors, 0, sizeof(saved_expected_errors));
>  
> 
> === modified file 'configure.in'
> --- a/configure.in	2008-05-21 07:59:58 +0000
> +++ b/configure.in	2008-06-05 18:31:12 +0000
> @@ -2341,10 +2341,20 @@ then
>  fi
>  AC_MSG_RESULT("$netinet_inc")
>  
> +AC_CACHE_CHECK([support for weak symbols], mysql_cv_weak_symbol,
> +[AC_TRY_LINK([],[
> +  extern void __attribute__((weak)) foo(void);
> +], [mysql_cv_weak_symbol=yes], [mysql_cv_weak_symbol=no])])
> +
> +if test "x$mysql_cv_weak_symbol" = xyes; then
> +  AC_DEFINE(HAVE_WEAK_SYMBOL, 1,
> +            [Define to 1 if compiler supports weak symbol attribute.])
> +fi
> +
>  AC_LANG_SAVE
>  AC_LANG_CPLUSPLUS
>  AC_CHECK_HEADERS(cxxabi.h)
> -AC_CACHE_CHECK([checking for abi::__cxa_demangle], mysql_cv_cxa_demangle,
> +AC_CACHE_CHECK([for abi::__cxa_demangle], mysql_cv_cxa_demangle,
>  [AC_TRY_LINK([#include <cxxabi.h>], [
>    char *foo= 0; int bar= 0;
>    foo= abi::__cxa_demangle(foo, foo, 0, &bar);
> 
> === modified file 'include/Makefile.am'
> --- a/include/Makefile.am	2008-02-08 11:13:33 +0000
> +++ b/include/Makefile.am	2008-06-05 18:31:12 +0000
> @@ -36,7 +36,7 @@ noinst_HEADERS =	config-win.h config-net
>  			mysql_version.h.in my_handler.h my_time.h \
>  			my_vle.h my_user.h my_atomic.h atomic/nolock.h \
>  			atomic/rwlock.h atomic/x86-gcc.h atomic/x86-msvc.h \
> -			atomic/gcc_builtins.h my_libwrap.h
> +			atomic/gcc_builtins.h my_libwrap.h my_stacktrace.h
>  
>  # Remove built files and the symlinked directories
>  CLEANFILES =            $(BUILT_SOURCES) readline openssl
> 
> === renamed file 'sql/stacktrace.h' => 'include/my_stacktrace.h'
> --- a/sql/stacktrace.h	2008-02-21 00:53:35 +0000
> +++ b/include/my_stacktrace.h	2008-06-05 18:31:12 +0000
> @@ -13,57 +13,49 @@
>     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" {
> +#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 HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS && HAVE_CXXABI_H
> && HAVE_ABI_CXA_DEMANGLE
> +#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 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
> +#ifdef __WIN__
> +void my_set_exception_pointers(EXCEPTION_POINTERS *ep);
> +#endif
>  #endif
>  
>  #ifdef HAVE_WRITE_CORE
> -void write_core(int sig);
> +void my_write_core(int sig);
>  #endif
>  
> +C_MODE_END
>  
> -#ifdef	__cplusplus
> -}
> -#endif
> +#endif /* _my_stacktrace_h_ */
> 
> === modified file 'libmysqld/CMakeLists.txt'
> --- a/libmysqld/CMakeLists.txt	2008-05-20 07:38:17 +0000
> +++ b/libmysqld/CMakeLists.txt	2008-06-05 18:31:12 +0000
> @@ -185,8 +185,7 @@ SET(LIBMYSQLD_SOURCES emb_qcache.cc libm
>             ../sql/strfunc.cc ../sql/table.cc ../sql/thr_malloc.cc
>             ../sql/time.cc ../sql/tztime.cc ../sql/uniques.cc ../sql/unireg.cc
>             ../sql/partition_info.cc ../sql/sql_connect.cc 
> -           ../sql/scheduler.cc ../sql/stacktrace.c
> -           ../sql/event_parse_data.cc
> +           ../sql/scheduler.cc ../sql/event_parse_data.cc
>             ${GEN_SOURCES}
>             ${LIB_SOURCES})
>  
> 
> === modified file 'libmysqld/Makefile.am'
> --- a/libmysqld/Makefile.am	2008-05-09 07:43:02 +0000
> +++ b/libmysqld/Makefile.am	2008-06-05 18:31:12 +0000
> @@ -69,7 +69,7 @@ sqlsources = derror.cc field.cc field_co
>  	sql_select.cc sql_do.cc sql_show.cc set_var.cc \
>  	sql_string.cc sql_table.cc sql_test.cc sql_udf.cc \
>  	sql_update.cc sql_yacc.cc table.cc thr_malloc.cc time.cc \
> -	unireg.cc uniques.cc stacktrace.c sql_union.cc hash_filo.cc \
> +	unireg.cc uniques.cc sql_union.cc hash_filo.cc \
>  	spatial.cc gstream.cc sql_help.cc tztime.cc sql_cursor.cc \
>  	sp_head.cc sp_pcontext.cc sp.cc sp_cache.cc sp_rcontext.cc \
>  	parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \
> 
> === modified file 'libmysqld/lib_sql.cc'
> --- a/libmysqld/lib_sql.cc	2008-05-20 07:38:17 +0000
> +++ b/libmysqld/lib_sql.cc	2008-06-05 18:31:12 +0000
> @@ -79,6 +79,15 @@ emb_advanced_command(MYSQL *mysql, enum 
>    my_bool result= 1;
>    THD *thd=(THD *) mysql->thd;
>    NET *net= &mysql->net;
> +  my_bool stmt_skip= stmt ? stmt->state != MYSQL_STMT_INIT_DONE : FALSE;
> +
> +  if (!thd)
> +  {
> +    /* Do "reconnect" if possible */
> +    if (mysql_reconnect(mysql) || stmt_skip)
> +      return 1;
> +    thd= (THD *) mysql->thd;
> +  }
>  
>  #if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
>    thd->profiling.start_new_query();
> 
> === modified file 'mysql-test/t/sql_low_priority_updates_func.test'
> --- a/mysql-test/t/sql_low_priority_updates_func.test	2008-04-10 13:14:28 +0000
> +++ b/mysql-test/t/sql_low_priority_updates_func.test	2008-06-05 18:31:12 +0000
> @@ -19,6 +19,7 @@
>  #                                                                             #
>  ###############################################################################
>  
> +--source include/not_embedded.inc
>  
>  ################################################################
>  # sql_low_priority_updates was renamed to low_priority_updates #
> 
> === modified file 'mysys/CMakeLists.txt'
> --- a/mysys/CMakeLists.txt	2007-11-07 22:47:25 +0000
> +++ b/mysys/CMakeLists.txt	2008-06-05 18:31:12 +0000
> @@ -39,7 +39,7 @@ SET(MYSYS_SOURCES  array.c charset-def.c
>  				my_mkdir.c my_mmap.c my_net.c my_once.c my_open.c my_pread.c my_pthread.c 
>  				my_quick.c my_read.c my_realloc.c my_redel.c my_rename.c my_seek.c my_sleep.c
>  				my_static.c my_symlink.c my_symlink2.c my_sync.c my_thr_init.c my_wincond.c
> -				my_windac.c my_winthread.c my_write.c ptr_cmp.c queues.c
> +				my_windac.c my_winthread.c my_write.c ptr_cmp.c queues.c stacktrace.c
>  				rijndael.c safemalloc.c sha1.c string.c thr_alarm.c thr_lock.c thr_mutex.c
>  				thr_rwlock.c tree.c typelib.c my_vle.c base64.c my_memmem.c my_getpagesize.c)
>  
> 
> === modified file 'mysys/Makefile.am'
> --- a/mysys/Makefile.am	2008-03-28 19:11:07 +0000
> +++ b/mysys/Makefile.am	2008-06-05 18:31:12 +0000
> @@ -51,7 +51,7 @@ libmysys_a_SOURCES =    my_init.c my_get
>  			charset.c charset-def.c my_bitmap.c my_bit.c md5.c \
>  			my_gethostbyname.c rijndael.c my_aes.c sha1.c \
>  			my_handler.c my_netware.c my_largepage.c \
> -			my_memmem.c \
> +			my_memmem.c stacktrace.c \
>  			my_windac.c my_access.c base64.c my_libwrap.c
>  EXTRA_DIST =		thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \
>  			thr_mutex.c thr_rwlock.c \
> 
> === renamed file 'sql/stacktrace.c' => 'mysys/stacktrace.c'
> --- a/sql/stacktrace.c	2008-02-21 00:53:35 +0000
> +++ b/mysys/stacktrace.c	2008-06-05 18:31:12 +0000
> @@ -17,7 +17,7 @@
>  #define DONT_DEFINE_VOID 1
>  
>  #include <my_global.h>
> -#include "stacktrace.h"
> +#include <my_stacktrace.h>
>  
>  #ifndef __WIN__
>  #include <signal.h>
> @@ -33,16 +33,22 @@
>  
>  #define PTR_SANE(p) ((p) && (char*)(p) >= heap_start &&
> (char*)(p) <= heap_end)
>  
> -char *heap_start;
> +static char *heap_start;
> +extern char *__bss_start;
>  
> -void safe_print_str(const char* name, const char* val, int max_len)
> +void my_init_stacktrace()
> +{
> +  heap_start = (char*) &__bss_start;
> +}
> +
> +void my_safe_print_str(const char* name, const char* val, int max_len)
>  {
>    char *heap_end= (char*) sbrk(0);
>    fprintf(stderr, "%s at %p ", name, val);
>  
>    if (!PTR_SANE(val))
>    {
> -    fprintf(stderr, " is invalid pointer\n");
> +    fprintf(stderr, "is an invalid pointer\n");
>      return;
>    }
>  
> @@ -103,6 +109,12 @@ inline uint32* find_prev_pc(uint32* pc, 
>  #endif /* defined(__alpha__) && defined(__GNUC__) */
>  
>  #if BACKTRACE_DEMANGLE
> +
> +char __attribute__ ((weak)) *my_demangle(const char *mangled_name, int *status)
> +{
> +  return NULL;
> +}
> +
>  static void my_demangle_symbols(char **addrs, int n)
>  {
>    int status, i;
> @@ -158,7 +170,7 @@ static void backtrace_current_thread(voi
>  #endif
>  
>  
> -void  print_stacktrace(uchar* stack_bottom, ulong thread_stack)
> +void my_print_stacktrace(uchar* stack_bottom, ulong thread_stack)
>  {
>  #if HAVE_BACKTRACE
>    backtrace_current_thread();
> @@ -283,14 +295,14 @@ end:
>  /* Produce a core for the thread */
>  
>  #ifdef NOT_USED /* HAVE_LINUXTHREADS */
> -void write_core(int sig)
> +void my_write_core(int sig)
>  {
>    signal(sig, SIG_DFL);
>    if (fork() != 0) exit(1);			/* Abort main program */
>    /* Core will be written at exit */
>  }
>  #else
> -void write_core(int sig)
> +void my_write_core(int sig)
>  {
>    signal(sig, SIG_DFL);
>  #ifdef HAVE_gcov
> @@ -356,6 +368,10 @@ static EXCEPTION_POINTERS *exception_ptr
>  #define MODULE64_SIZE_WINXP 576
>  #define STACKWALK_MAX_FRAMES 64
>  
> +void my_init_stacktrace()
> +{
> +}
> +
>  /*
>    Dynamically load dbghelp functions
>  */
> @@ -395,7 +411,7 @@ BOOL init_dbghelp_functions()
>    return rc;
>  }
>  
> -void set_exception_pointers(EXCEPTION_POINTERS *ep)
> +void my_set_exception_pointers(EXCEPTION_POINTERS *ep)
>  {
>    exception_ptrs = ep;
>  }
> @@ -405,7 +421,7 @@ void set_exception_pointers(EXCEPTION_PO
>  #define SYMOPT_NO_PROMPTS 0
>  #endif
>  
> -void print_stacktrace(uchar* unused1, ulong unused2)
> +void my_print_stacktrace(uchar* unused1, ulong unused2)
>  {
>    HANDLE  hProcess= GetCurrentProcess();
>    HANDLE  hThread= GetCurrentThread();
> @@ -513,7 +529,7 @@ void print_stacktrace(uchar* unused1, ul
>    file name is constructed from executable name plus
>    ".dmp" extension
>  */
> -void write_core(int unused)
> +void my_write_core(int unused)
>  {
>    char path[MAX_PATH];
>    char dump_fname[MAX_PATH]= "core.dmp";
> @@ -560,7 +576,7 @@ void write_core(int unused)
>  }
>  
>  
> -void safe_print_str(const char *name, const char *val, int len)
> +void my_safe_print_str(const char *name, const char *val, int len)
>  {
>    fprintf(stderr,"%s at %p", name, val);
>    __try 
> 
> === modified file 'sql/CMakeLists.txt'
> --- a/sql/CMakeLists.txt	2008-05-12 16:34:25 +0000
> +++ b/sql/CMakeLists.txt	2008-06-05 18:31:12 +0000
> @@ -43,7 +43,7 @@ ADD_DEFINITIONS(-DMYSQL_SERVER -D_CONSOL
>  
>  ADD_EXECUTABLE(mysqld
>                 ../sql-common/client.c derror.cc des_key_file.cc
> -               discover.cc ../libmysql/errmsg.c field.cc  stacktrace.c stacktrace.h
> field_conv.cc 
> +               discover.cc ../libmysql/errmsg.c field.cc  field_conv.cc 
>                 filesort.cc gstream.cc
>                 ha_partition.cc
>                 handler.cc hash_filo.cc hash_filo.h 
> 
> === modified file 'sql/Makefile.am'
> --- a/sql/Makefile.am	2008-05-09 07:43:02 +0000
> +++ b/sql/Makefile.am	2008-06-05 18:31:12 +0000
> @@ -66,7 +66,7 @@ noinst_HEADERS =	item.h item_func.h item
>  			sql_repl.h slave.h rpl_filter.h rpl_injector.h \
>  			log_event.h rpl_record.h \
>  			log_event_old.h rpl_record_old.h \
> -			stacktrace.h sql_sort.h sql_cache.h set_var.h \
> +			sql_sort.h sql_cache.h set_var.h \
>  			spatial.h gstream.h client_settings.h tzfile.h \
>  			tztime.h my_decimal.h\
>  			sp_head.h sp_pcontext.h sp_rcontext.h sp.h sp_cache.h \
> @@ -110,7 +110,7 @@ mysqld_SOURCES =	sql_lex.cc sql_handler.
>  			rpl_reporting.cc \
>                          sql_union.cc sql_derived.cc \
>  			sql_client.cc \
> -			stacktrace.c repl_failsafe.h repl_failsafe.cc \
> +			repl_failsafe.h repl_failsafe.cc \
>  			sql_olap.cc sql_view.cc \
>  			gstream.cc spatial.cc sql_help.cc sql_cursor.cc \
>  			tztime.cc my_decimal.cc\
> 
> === modified file 'sql/mysqld.cc'
> --- a/sql/mysqld.cc	2008-05-20 07:38:17 +0000
> +++ b/sql/mysqld.cc	2008-06-05 18:31:12 +0000
> @@ -22,7 +22,7 @@
>  #include "sql_repl.h"
>  #include "rpl_filter.h"
>  #include "repl_failsafe.h"
> -#include "stacktrace.h"
> +#include <my_stacktrace.h>
>  #include "mysqld_suffix.h"
>  #include "mysys_err.h"
>  #include "events.h"
> @@ -2049,7 +2049,7 @@ LONG WINAPI my_unhandler_exception_filte
>  #endif /* DEBUG_UNHANDLED_EXCEPTION_FILTER */
>    __try
>    {
> -    set_exception_pointers(ex_pointers);
> +    my_set_exception_pointers(ex_pointers);
>      handle_segfault(ex_pointers->ExceptionRecord->ExceptionCode);
>    }
>    __except(EXCEPTION_EXECUTE_HANDLER)
> @@ -2432,8 +2432,8 @@ the thread stack. Please read http://dev
>  Attempting backtrace. You can use the following information to find out\n\
>  where mysqld died. If you see no messages after this, something went\n\
>  terribly wrong...\n");  
> -    print_stacktrace(thd ? (uchar*) thd->thread_stack : (uchar*) 0,
> -                     my_thread_stack_size);
> +    my_print_stacktrace(thd ? (uchar*) thd->thread_stack : NULL,
> +                        my_thread_stack_size);
>    }
>    if (thd)
>    {
> @@ -2457,7 +2457,7 @@ terribly wrong...\n");  
>      }
>      fprintf(stderr, "Trying to get some variables.\n\
>  Some pointers may be invalid and cause the dump to abort...\n");
> -    safe_print_str("thd->query", thd->query, 1024);
> +    my_safe_print_str("thd->query", thd->query, 1024);
>      fprintf(stderr, "thd->thread_id=%lu\n", (ulong) thd->thread_id);
>      fprintf(stderr, "thd->killed=%s\n", kreason);
>    }
> @@ -2504,7 +2504,7 @@ bugs.\n");
>    {
>      fprintf(stderr, "Writing a core file\n");
>      fflush(stderr);
> -    write_core(sig);
> +    my_write_core(sig);
>    }
>  #endif
>  
> @@ -2538,7 +2538,7 @@ static void init_signals(void)
>      sigemptyset(&sa.sa_mask);
>      sigprocmask(SIG_SETMASK,&sa.sa_mask,NULL);
>  
> -    init_stacktrace();
> +    my_init_stacktrace();
>  #if defined(__amiga__)
>      sa.sa_handler=(void(*)())handle_segfault;
>  #else
> 
> 

Thread
bzr commit into mysql-5.1 branch (davi:2660) Bug#37003Davi Arnaut5 Jun
  • Re: bzr commit into mysql-5.1 branch (davi:2660) Bug#37003Magnus Svensson18 Jun