diff options
-rw-r--r-- | BitKeeper/etc/logging_ok | 1 | ||||
-rw-r--r-- | Docs/manual.texi | 8 | ||||
-rw-r--r-- | sql/mysqld.cc | 35 | ||||
-rw-r--r-- | sql/stacktrace.c | 2 |
4 files changed, 24 insertions, 22 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index cfda01ec450..7f425ebcf80 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -7,3 +7,4 @@ sasha@mysql.sashanet.com heikki@donna.mysql.fi miguel@light.local monty@donna.mysql.fi +monty@bitch.mysql.fi diff --git a/Docs/manual.texi b/Docs/manual.texi index 84048a74aad..6a3311601c7 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -9880,12 +9880,6 @@ that you also probably need to raise the @code{core file size} by adding @code{ulimit -c 1000000} to @code{safe_mysqld} or starting @code{safe_mysqld} with @code{--core-file-sizes=1000000}. @xref{safe_mysqld, , @code{safe_mysqld}}. -To get a core dump on Linux if @code{mysqld} dies with a SIGSEGV signal, you can -start @code{mysqld} with the @code{--core-file} option. Note that you also probably -need to raise the @code{core file size} by adding @code{ulimit -c 1000000} to -@code{safe_mysqld} or starting @code{safe_mysqld} with -@code{--core-file-sizes=1000000}. @xref{safe_mysqld, , @code{safe_mysqld}}. - If you are linking your own MySQL client and get the error: @example @@ -46844,6 +46838,8 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.45 @itemize @bullet @item +@code{--core-file} now works on Solaris. +@item Fixed bug with BDB tables and keys on @code{BLOB}'s. @item Fixed bug in @code{MERGE} tables on OS with 32 bit file pointers. diff --git a/sql/mysqld.cc b/sql/mysqld.cc index bfbe8f8a25a..7303d593bdc 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1119,6 +1119,19 @@ static void start_signal_handler(void) } #elif defined(__EMX__) +static void init_signals(void) +{ + signal(SIGQUIT, sig_kill); + signal(SIGKILL, sig_kill); + signal(SIGTERM, sig_kill); + signal(SIGINT, sig_kill); + signal(SIGHUP, sig_reload); // Flush everything + signal(SIGALRM, SIG_IGN); + signal(SIGBREAK,SIG_IGN); + signal_thread = pthread_self(); +} + + static void sig_reload(int signo) { reload_acl_and_cache((THD*) 0,REFRESH_LOG, (TABLE_LIST*) 0); // Flush everything @@ -1135,22 +1148,10 @@ static void sig_kill(int signo) signal(signo, SIG_ACK); } -static void init_signals(void) -{ - signal(SIGQUIT, sig_kill); - signal(SIGKILL, sig_kill); - signal(SIGTERM, sig_kill); - signal(SIGINT, sig_kill); - signal(SIGHUP, sig_reload); // Flush everything - signal(SIGALRM, SIG_IGN); - signal(SIGBREAK,SIG_IGN); - signal_thread = pthread_self(); -} static void start_signal_handler(void) { } - #else /* if ! __WIN__ && ! __EMX__ */ #ifdef HAVE_LINUXTHREADS @@ -1160,10 +1161,12 @@ static void start_signal_handler(void) static sig_handler handle_segfault(int sig) { THD *thd=current_thd; - // strictly speaking, one needs a mutex here - // but since we have got SIGSEGV already, things are a mess - // so not having the mutex is not as bad as possibly using a buggy - // mutex - so we keep things simple + /* + Strictly speaking, we should need a mutex here + but since we have got SIGSEGV already, things are a mess + so not having the mutex is not as bad as possibly using a buggy + mutex - so we keep things simple. + */ if (segfaulted) { fprintf(stderr, "Fatal signal %d while backtracing\n", sig); diff --git a/sql/stacktrace.c b/sql/stacktrace.c index 81d8debc27a..18db1949db9 100644 --- a/sql/stacktrace.c +++ b/sql/stacktrace.c @@ -218,5 +218,7 @@ void write_core(int sig) { signal(sig, SIG_DFL); pthread_kill(pthread_self(), sig); + /* On Solaris, the above kill is not enough */ + sigsend(P_PID,P_MYID,sig); } #endif |