*************** *** 76,96 **** alarm_aborted=0; init_queue(&alarm_queue,max_alarms+1,offsetof(ALARM,expire_time),0, compare_ulong,NullS); ! sigfillset(&full_signal_set); /* Neaded to block signals */ pthread_mutex_init(&LOCK_alarm,MY_MUTEX_INIT_FAST); pthread_cond_init(&COND_alarm,NULL); ! #if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD) ! #if defined(HAVE_mit_thread) ! sigset(THR_CLIENT_ALARM,thread_alarm); /* int. thread system calls */ ! #else { ! struct sigaction sact; ! sact.sa_flags = 0; ! sact.sa_handler = thread_alarm; ! sigaction(THR_CLIENT_ALARM, &sact, (struct sigaction*) 0); } - #endif - #endif sigemptyset(&s); sigaddset(&s, THR_SERVER_ALARM); alarm_thread=pthread_self(); --- 74,89 ---- alarm_aborted=0; init_queue(&alarm_queue,max_alarms+1,offsetof(ALARM,expire_time),0, compare_ulong,NullS); ! sigfillset(&full_signal_set); /* Needed to block signals */ pthread_mutex_init(&LOCK_alarm,MY_MUTEX_INIT_FAST); pthread_cond_init(&COND_alarm,NULL); ! #ifndef USE_ALARM_THREAD ! if (thd_lib_detected != THD_LIB_LT) ! #endif { ! my_sigset(thd_lib_detected == THD_LIB_LT ? SIGALRM : SIGUSR1, ! thread_alarm); } sigemptyset(&s); sigaddset(&s, THR_SERVER_ALARM); alarm_thread=pthread_self(); *************** *** 108,120 **** } #elif defined(USE_ONE_SIGNAL_HAND) pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */ ! #if THR_SERVER_ALARM == THR_CLIENT_ALARM ! sigset(THR_CLIENT_ALARM,process_alarm); /* Linuxthreads */ ! pthread_sigmask(SIG_UNBLOCK, &s, NULL); ! #endif #else pthread_sigmask(SIG_UNBLOCK, &s, NULL); - sigset(THR_SERVER_ALARM,process_alarm); #endif DBUG_VOID_RETURN; } --- 101,115 ---- } #elif defined(USE_ONE_SIGNAL_HAND) pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */ ! if (thd_lib_detected == THD_LIB_LT) ! { ! my_sigset(thd_lib_detected == THD_LIB_LT ? SIGALRM : SIGUSR1, ! process_alarm); /* Linuxthreads */ ! pthread_sigmask(SIG_UNBLOCK, &s, NULL); ! } #else + my_sigset(THR_SERVER_ALARM, process_alarm); pthread_sigmask(SIG_UNBLOCK, &s, NULL); #endif DBUG_VOID_RETURN; } *************** *** 240,246 **** if (alarm_data->malloced) my_free((gptr) alarm_data,MYF(0)); found++; ! #ifndef DBUG_OFF break; #endif } --- 235,241 ---- if (alarm_data->malloced) my_free((gptr) alarm_data,MYF(0)); found++; ! #ifdef DBUG_OFF break; #endif } *************** *** 249,258 **** if (!found) { if (*alarmed) ! fprintf(stderr,"Warning: Didn't find alarm %lx in queue of %d alarms\n", ! (long) *alarmed, alarm_queue.elements); ! DBUG_PRINT("warning",("Didn't find alarm %lx in queue\n", ! (long) *alarmed)); } pthread_mutex_unlock(&LOCK_alarm); pthread_sigmask(SIG_SETMASK,&old_mask,NULL); --- 244,254 ---- if (!found) { if (*alarmed) ! fprintf(stderr, ! "Warning: Didn't find alarm 0x%lx in queue of %d alarms\n", ! (long) *alarmed, alarm_queue.elements); ! DBUG_PRINT("warning",("Didn't find alarm 0x%lx in queue\n", ! (long) *alarmed)); } pthread_mutex_unlock(&LOCK_alarm); pthread_sigmask(SIG_SETMASK,&old_mask,NULL); *************** *** 274,291 **** This must be first as we can't call DBUG inside an alarm for a normal thread */ ! #if THR_SERVER_ALARM == THR_CLIENT_ALARM ! if (!pthread_equal(pthread_self(),alarm_thread)) { #if defined(MAIN) && !defined(__bsdi__) ! printf("thread_alarm\n"); fflush(stdout); #endif #ifdef DONT_REMEMBER_SIGNAL ! sigset(THR_CLIENT_ALARM,process_alarm); /* int. thread system calls */ #endif return; } - #endif /* We have to do do the handling of the alarm in a sub function, --- 270,287 ---- This must be first as we can't call DBUG inside an alarm for a normal thread */ ! if (thd_lib_detected == THD_LIB_LT && ! !pthread_equal(pthread_self(),alarm_thread)) { #if defined(MAIN) && !defined(__bsdi__) ! printf("thread_alarm in process_alarm\n"); fflush(stdout); #endif #ifdef DONT_REMEMBER_SIGNAL ! my_sigset(thd_lib_detected == THD_LIB_LT ? SIGALRM : SIGUSR1, ! process_alarm); /* int. thread system calls */ #endif return; } /* We have to do do the handling of the alarm in a sub function, *************** *** 301,307 **** process_alarm_part2(sig); #ifndef USE_ALARM_THREAD #if defined(DONT_REMEMBER_SIGNAL) && !defined(USE_ONE_SIGNAL_HAND) ! sigset(THR_SERVER_ALARM,process_alarm); #endif pthread_mutex_unlock(&LOCK_alarm); pthread_sigmask(SIG_SETMASK,&old_mask,NULL); --- 297,303 ---- process_alarm_part2(sig); #ifndef USE_ALARM_THREAD #if defined(DONT_REMEMBER_SIGNAL) && !defined(USE_ONE_SIGNAL_HAND) ! my_sigset(THR_SERVER_ALARM, process_alarm); #endif pthread_mutex_unlock(&LOCK_alarm); pthread_sigmask(SIG_SETMASK,&old_mask,NULL); *************** *** 504,520 **** ARGSUSED */ - #if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD) static sig_handler thread_alarm(int sig) { #ifdef MAIN printf("thread_alarm\n"); fflush(stdout); #endif #ifdef DONT_REMEMBER_SIGNAL ! sigset(sig,thread_alarm); /* int. thread system calls */ #endif } - #endif #ifdef HAVE_TIMESPEC_TS_SEC --- 499,513 ---- ARGSUSED */ static sig_handler thread_alarm(int sig) { #ifdef MAIN printf("thread_alarm\n"); fflush(stdout); #endif #ifdef DONT_REMEMBER_SIGNAL ! my_sigset(sig, thread_alarm); /* int. thread system calls */ #endif } #ifdef HAVE_TIMESPEC_TS_SEC *************** *** 915,921 **** printf("Warning: Got signal %d from thread %s\n",sig,my_thread_name()); fflush(stdout); #ifdef DONT_REMEMBER_SIGNAL ! sigset(sig,print_signal_warning); /* int. thread system calls */ #endif #ifndef OS2 if (sig == SIGALRM) --- 908,914 ---- printf("Warning: Got signal %d from thread %s\n",sig,my_thread_name()); fflush(stdout); #ifdef DONT_REMEMBER_SIGNAL ! my_sigset(sig, print_signal_warning); /* int. thread system calls */ #endif #ifndef OS2 if (sig == SIGALRM)