problem with signal handling and threads (fbsd49R)

rmkml rmkml at wanadoo.fr
Thu Jan 8 10:21:20 PST 2004


please can you give me an example
of mask to SET BLOCK ou UNBLOCK
in both threads (main and run)
in order to make this sample code working ?

thanks a lot.


On Thu, 8 Jan 2004, Daniel Eischen wrote:

> Date: Thu, 8 Jan 2004 08:48:34 -0500 (EST)
> From: Daniel Eischen <eischen at vigrid.com>
> To: rmkml <rmkml at wanadoo.fr>
> Cc: freebsd-hackers at freebsd.org
> Subject: Re: problem with signal handling and threads (fbsd49R)
>
> On Thu, 8 Jan 2004, rmkml wrote:
>
> > Hi,
> >
> > I've got a problem with signal handling and threads.
> > I've reproduced the problem in a simple code.
> > Description of program:
> >  install a signal  handler SIGINT.
> >  create a thread that do nothing except waiting.
> >  main thread use poll to wait forever [ poll(,,-1) ].
> >  user has too crtl-C to interrupt poll
> >  after 5 ctrl-C, loop is over and main-thread signals sub-thread to
> > stops.
> >
> > In fact, it appears not to work correctly: after one ctrl-C, user has to
> > press ctrl-C twice before poll returns with errno=EINTR !!
> > If the thread creation is removed from code, the expected behavior is
> > seen : the program works fine.
> >
> > If I replace the poll by sigsuspend() the program works fine too.
> >
> > Is there something wrong with poll function ?
>
> No, it's your program.  Why do you think the signal will
> only be delivered to the main thread and not the other
> (run) thread?  If you want a particular thread to receive
> a signal, then you had better set up signal masks for
> all threads appropriately (or use sigwait()).
>
>
>
>


More information about the freebsd-hackers mailing list