diff options
author | unknown <sasha@mysql.sashanet.com> | 2002-03-26 22:23:51 -0700 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2002-03-26 22:23:51 -0700 |
commit | ef261914d3fdaaf25f1415b8625cc9ff89f9266a (patch) | |
tree | addd464870d8ce2dc41b174031430761b68ff23e /sql/mysqld.cc | |
parent | 4252578b687e972cb482ab22efca01b8ea484221 (diff) | |
parent | 079a551ca735e79f3d7a2ebbecf8be4d4ba7608a (diff) | |
download | mariadb-git-ef261914d3fdaaf25f1415b8625cc9ff89f9266a.tar.gz |
Merge work:/home/bk/mysql-4.0
into mysql.sashanet.com:/reiser-data/mysql-4.0
sql/lex.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/slave.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
Diffstat (limited to 'sql/mysqld.cc')
-rw-r--r-- | sql/mysqld.cc | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/sql/mysqld.cc b/sql/mysqld.cc index d33ec9b92ca..a0154f980f1 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -38,7 +38,17 @@ #define ONE_THREAD #endif -/* do stack traces are only supported on linux intel */ +#ifdef SAFEMALLOC +#define SHUTDOWN_THD shutdown_th=pthread_self(); +#define MAIN_THD main_th=pthread_self(); +#define SIGNAL_THD signal_th=pthread_self(); +#else +#define SHUTDOWN_THD +#define MAIN_THD +#define SIGNAL_THD +#endif + +/* stack traces are only supported on linux intel */ #if defined(__linux__) && defined(__i386__) && defined(USE_PSTACK) #define HAVE_STACK_TRACE_ON_SEGV #include "../pstack/pstack.h" @@ -701,6 +711,7 @@ static void __cdecl kill_server(int sig_ptr) sql_print_error(ER(ER_GOT_SIGNAL),my_progname,sig); /* purecov: inspected */ #if defined(USE_ONE_SIGNAL_HAND) && !defined(__WIN__) && !defined(OS2) + SHUTDOWN_THD; my_thread_init(); // If this is a new thread #endif close_connections(); @@ -716,6 +727,7 @@ static void __cdecl kill_server(int sig_ptr) #ifdef USE_ONE_SIGNAL_HAND static pthread_handler_decl(kill_server_thread,arg __attribute__((unused))) { + SHUTDOWN_THD; my_thread_init(); // Initialize new thread kill_server(0); my_thread_end(); // Normally never reached @@ -1262,6 +1274,7 @@ static void init_signals(void) signal(SIGALRM, SIG_IGN); signal(SIGBREAK,SIG_IGN); signal_thread = pthread_self(); + SIGNAL_THD; } static void start_signal_handler(void) @@ -1387,6 +1400,7 @@ static void init_signals(void) sigaction(SIGBUS, &sa, NULL); #endif sigaction(SIGILL, &sa, NULL); + sigaction(SIGFPE, &sa, NULL); } (void) sigemptyset(&set); #ifdef THREAD_SPECIFIC_SIGPIPE @@ -1454,7 +1468,7 @@ static void *signal_hand(void *arg __attribute__((unused))) int sig; my_thread_init(); // Init new thread DBUG_ENTER("signal_hand"); - + SIGNAL_THD; /* Setup alarm handler */ init_thr_alarm(max_connections+max_insert_delayed_threads); #if SIGINT != THR_KILL_SIGNAL @@ -1509,7 +1523,10 @@ static void *signal_hand(void *arg __attribute__((unused))) else while ((error=my_sigwait(&set,&sig)) == EINTR) ; if (cleanup_done) + { + my_thread_end(); pthread_exit(0); // Safety + } switch (sig) { case SIGTERM: case SIGQUIT: @@ -1603,6 +1620,7 @@ int uname(struct utsname *a) pthread_handler_decl(handle_shutdown,arg) { MSG msg; + SHUTDOWN_THD; my_thread_init(); /* this call should create the message queue for this thread */ @@ -1629,6 +1647,7 @@ int __stdcall handle_kill(ulong ctrl_type) #ifdef OS2 pthread_handler_decl(handle_shutdown,arg) { + SHUTDOWN_THD; my_thread_init(); // wait semaphore @@ -1700,6 +1719,7 @@ int main(int argc, char **argv) my_umask=0660; // Default umask for new files my_umask_dir=0700; // Default umask for new directories + MAIN_THD; MY_INIT(argv[0]); // init my_sys library & pthreads tzset(); // Set tzname |