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