Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Jun 2003 09:37:49 -0400 (EDT)
From:      Daniel Eischen <eischen@vigrid.com>
To:        xiong jinshan <xiongjinshan@yahoo.com>
Cc:        threads@freebsd.org
Subject:   Re: About the kse signal process
Message-ID:  <Pine.GSO.4.10.10306300936460.22873-100000@pcnet5.pcnet.com>
In-Reply-To: <20030630080920.82179.qmail@web80504.mail.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.10.10306300936460.22873-100000>