2003-02-14 03:25:52

by William Chow

[permalink] [raw]
Subject: missing a wakeup from pending signal

I am finding that my kernel thread will occasionally
fail to wake up eventhough it has a signal pending.
The thread is calling wait_event_interruptible and
waiting for SIGIO (from the sg driver). I only see it
fail to wake up when performing intensive sg activity.
>From kdb, the task shows the signal was delivered
(sigpending==1 and pending.signal.sig[0]==0x10000000).

So, I was just wondering if anyone was aware of a fix
(I'm using 2.4.18 on i386). A google search failed to
turn up anything obvious. My code is pretty basic
stuff but here the wait loop just in case:

for (;;) {
gotsig = wait_event_interruptible();
if (gotsig) {
sigemptyset(&set);
spin_lock_irq(&current->sigmask_lock);
signum = dequeue_signal(&set, &info);
spin_unlock_irq(&current->sigmask_lock);
if (signum != SIGIO)
break;
process_io();
}
}

Please CC me in the response. Thanks in advance.

__________________________________________________
Do you Yahoo!?
Yahoo! Shopping - Send Flowers for Valentine's Day
http://shopping.yahoo.com