About the kse signal process

Daniel Eischen eischen at vigrid.com
Mon Jun 30 06:37:51 PDT 2003


On Mon, 30 Jun 2003, xiong jinshan wrote:

> Hi,
>   I am wondering that the following piece of code
> can't work with the unix semantics. I tested it with
> 5.1 release and i386 arch. By unix sementics, if I
> send the SIGALRM to this running programme, it should
> be received by the thr_func() only, and print a prompt
> msg on the console.

Yes, only thr_func() should receive the alarm.

> 
> Reguards,
> JinShan
> 
> Ps: c code:
> 
> /* vi: set ts=4 sw=4 expandtab: */
> #include <stdio.h>
> #include <signal.h>
> #include <pthread.h>
> 
> void sigalrm_handler(int signo)
> {
>     if(signo != SIGALRM)
>         abort();
> 
>     printf("Received sig alarm!\n");
>     return;
> }
> 
> void thr_func(void)
> {
>     sigset_t mask;
>     struct sigaction sa;
> 
>     sigemptyset(&mask);
>     sigaddset(&mask, SIGALRM);
>     pthread_sigmask(SIG_UNBLOCK, &mask, NULL);
> 
>     memset(&sa, 0, sizeof(struct sigaction));
>     sa.sa_handler = sigalrm_handler;
>     sigaction(SIGALRM, &sa, NULL);
> 
>     while(1);
> }
> 
> main()
> {
>     int err;
>     pthread_t pth;
>     sigset_t mask;
> 
>     sigfillset(&mask);
>     sigprocmask(SIG_BLOCK, &mask, NULL);
> 
>     err = pthread_create(&pth, NULL, thr_func, NULL);
>     if(err < 0) {
>         perror("pthread_create!\n");
>         return -1;
>     }
> 
>     while(1);

-- 
Dan Eischen



More information about the freebsd-threads mailing list