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
handlers.
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) {
perror("signal");
exit(1);
}
*/
sigfillset(&set);
if (pthread_sigmask(SIG_SETMASK, &set, NULL) != 0) {
printf("pthread_sigmask() error\n");
exit(1);
}
// for ( ; ; ) ;
sleep(FOR_EVER);
printf("alive again\n");
return 0;
}
--
Jan Pechanec <jp (at) devnull (dot) cz>
More information about the freebsd-threads
mailing list