***************
*** 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)