threads/94176: KSE: sigwait doesn't recieve SIGWINCH sent by pthread_kill() or kill -WINCH

David Xu davidxu at freebsd.org
Thu Apr 27 23:30:18 UTC 2006


The following reply was made to PR threads/94176; it has been noted by GNATS.

From: David Xu <davidxu at freebsd.org>
To: eugeny gladkih <john at drweb.com>
Cc: Andriy Gapon <avg at icyb.net.ua>,
 bug-followup at freebsd.org
Subject: Re: threads/94176: KSE: sigwait doesn't recieve SIGWINCH sent by pthread_kill() or kill -WINCH
Date: Fri, 28 Apr 2006 07:24:09 +0800

 On Friday 28 April 2006 00:50, eugeny gladkih wrote:
 > >>>>> "AG" == Andriy Gapon <avg at icyb.net.ua> writes:
 >
 >  AG> David, John,
 >
 >  AG> maybe it would be beneficial to the general programmer public to add
 >  AG> something similar to the NOTES section of the following man page to
 > our AG> man page for sigwait:
 >  AG> http://condor.wesleyan.edu/cgi-bin/man.cgi?section=2&topic=sigwait
 >
 >  AG> Using the original example, it would mean adding something like the
 >  AG> following code to get the desired behavior:
 >
 >  AG> void dummy_handler(int signum)
 >  AG> {
 >  AG>         return;
 >  AG> }
 >
 >  AG> void *thread(void* unused) {
 >  AG>   struct sigaction sa;
 >  AG>   sa.sa_handler = dummy_handler;
 >  AG>   sigemptyset(&sa.sa_mask);
 >  AG>   sa.sa_flags = 0;
 >  AG>   sigaction(SIGWINCH, &sa, NULL);
 >  AG> .
 >  AG> .
 >  AG> .
 >
 >
 > why so stupid code should be presented in all software wanted
 > just to wait the signal? :(
 >
 > sigwait'ed signal is not ignored one! we DON'T ignore it we DO
 > wait for it. I'm afraid there is another problem with SIGTERM
 > which will terminate process. am I right, yeah?
 
 hmm, there is always race condition between userland and kernel,
 guess what will happen if your thread is executing userland code and
 a signal is being delivered to the process whose action is IGNORE ?
 you are not waiting for the signal.
 the dummy signal action you have to install can only help you to catch 
 bug if you forgot to mask it. in history, BSD throws aways signal
 immediately if the signal action is IGNORE, otherwise an ignored signal
 may cause a sleep to be interrupted, this can happen according to
 current sleep queue code and signal code.
 
 David Xu


More information about the freebsd-threads mailing list