problem with signal handling and threads (fbsd49R)
Daniel Eischen
eischen at vigrid.com
Thu Jan 8 05:48:36 PST 2004
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