4.x: masking signals has no effect without signal handlers installed

Jan Pechanec jp at devnull.cz
Tue Mar 1 15:23:15 GMT 2005

	hi all, I can see that masking signals under 4.10|11 has no effect 
unless I install respective signal handlers. Is it a bug, a feature or my 
mistake? The same program compiled under 5.3, tried with all three threads 
libraries, works as I would expect - masking has effect even without 

	in this example run under 4.10|11, ^C terminates the program, 
compiled with:

gcc -pthread -o pthread_sigmask pthread_sigmask.c

	if signal() call is commented out, ^C has no effect. How can I block 
all signals for particular thread without creating all sighandlers? 
Unfortunately using 5.3 is not possible for me now.

	regards, j. 

#include <sys/types.h>
#include <pthread.h>
#include <signal.h>
#include <errno.h>

#define FOR_EVER        (24*3600)

void sig_int_handler(int sig)
  printf("SIGINT catched\n");

int main(void)
  sigset_t set;

  if (signal(SIGINT, sig_int_handler) == SIG_ERR) {

  if (pthread_sigmask(SIG_SETMASK, &set, NULL) != 0) {
    printf("pthread_sigmask() error\n");

  // for ( ; ; ) ;
  printf("alive again\n");
  return 0;

Jan Pechanec <jp (at) devnull (dot) cz>

More information about the freebsd-threads mailing list