*************** *** 177,188 **** } /* cplusplus */ - #if defined(HAVE_LINUXTHREADS) - #define THR_KILL_SIGNAL SIGINT - #else - #define THR_KILL_SIGNAL SIGUSR2 // Can't use this with LinuxThreads - #endif - #ifdef HAVE_GLIBC2_STYLE_GETHOSTBYNAME_R #include #else --- 177,182 ---- } /* cplusplus */ #ifdef HAVE_GLIBC2_STYLE_GETHOSTBYNAME_R #include #else *************** *** 505,510 **** static void clean_up_mutexes(void); static int test_if_case_insensitive(const char *dir_name); static void create_pid_file(); /**************************************************************************** ** Code to end mysqld --- 499,505 ---- static void clean_up_mutexes(void); static int test_if_case_insensitive(const char *dir_name); static void create_pid_file(); + static uint get_thread_lib(void); /**************************************************************************** ** Code to end mysqld *************** *** 544,550 **** DBUG_PRINT("info",("Waiting for select_thread")); #ifndef DONT_USE_THR_ALARM ! if (pthread_kill(select_thread,THR_CLIENT_ALARM)) break; // allready dead #endif set_timespec(abstime, 2); --- 539,546 ---- DBUG_PRINT("info",("Waiting for select_thread")); #ifndef DONT_USE_THR_ALARM ! if (pthread_kill(select_thread, ! thd_lib_detected == THD_LIB_LT ? SIGALRM : SIGUSR1)) break; // allready dead #endif set_timespec(abstime, 2); *************** *** 844,850 **** sig,my_thread_id()); } #ifdef DONT_REMEMBER_SIGNAL ! sigset(sig,print_signal_warning); /* int. thread system calls */ #endif #if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) if (sig == SIGALRM) --- 840,846 ---- sig,my_thread_id()); } #ifdef DONT_REMEMBER_SIGNAL ! my_sigset(sig, print_signal_warning); /* int. thread system calls */ #endif #if !defined(__WIN__) && !defined(OS2) && !defined(__NETWARE__) if (sig == SIGALRM) *************** *** 1841,1848 **** DBUG_ENTER("init_signals"); if (test_flags & TEST_SIGINT) ! sigset(THR_KILL_SIGNAL,end_thread_signal); ! sigset(THR_SERVER_ALARM,print_signal_warning); // Should never be called! if (!(test_flags & TEST_NO_STACKTRACE) || (test_flags & TEST_CORE_ON_SIGNAL)) { --- 1837,1847 ---- DBUG_ENTER("init_signals"); if (test_flags & TEST_SIGINT) ! { ! my_sigset(thd_lib_detected == THD_LIB_LT ? SIGINT : SIGUSR2, ! end_thread_signal); ! } ! my_sigset(THR_SERVER_ALARM, print_signal_warning); // Should never be called! if (!(test_flags & TEST_NO_STACKTRACE) || (test_flags & TEST_CORE_ON_SIGNAL)) { *************** *** 1877,1883 **** #endif (void) sigemptyset(&set); #ifdef THREAD_SPECIFIC_SIGPIPE ! sigset(SIGPIPE,abort_thread); sigaddset(&set,SIGPIPE); #else (void) signal(SIGPIPE,SIG_IGN); // Can't know which thread --- 1876,1882 ---- #endif (void) sigemptyset(&set); #ifdef THREAD_SPECIFIC_SIGPIPE ! my_sigset(SIGPIPE, abort_thread); sigaddset(&set,SIGPIPE); #else (void) signal(SIGPIPE,SIG_IGN); // Can't know which thread *************** *** 2237,2244 **** MY_INIT(argv[0]); // init my_sys library & pthreads tzset(); // Set tzname start_time=time((time_t*) 0); - #ifdef OS2 { // fix timezone for daylight saving --- 2236,2243 ---- MY_INIT(argv[0]); // init my_sys library & pthreads tzset(); // Set tzname + thd_lib_detected= get_thread_lib(); start_time=time((time_t*) 0); #ifdef OS2 { // fix timezone for daylight saving *************** *** 5547,5552 **** (void) my_write(file, (byte*) buff, (uint) (end-buff),MYF(MY_WME)); (void) my_close(file, MYF(0)); } } --- 5546,5567 ---- (void) my_write(file, (byte*) buff, (uint) (end-buff),MYF(MY_WME)); (void) my_close(file, MYF(0)); } + } + + + static uint get_thread_lib(void) + { + char buff[64]; + + #ifdef _CS_GNU_LIBPTHREAD_VERSION + confstr(_CS_GNU_LIBPTHREAD_VERSION, buff, sizeof(buff)); + + if (!strncasecmp(buff, "NPTL", 4)) + return THD_LIB_NPTL; + else if (!strncasecmp(buff, "linuxthreads", 12)) + return THD_LIB_LT; + #endif + return THD_LIB_OTHER; }