[lkml]   [2001]   [Jun]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread

I have been seeing 'SIG: sigpending lied' when I change the current->blocked
value to ignore 'non shutdown' signals. The messages does not show up on

Searching with google I found a lot of problems being reported but no
solutions... Is this a 2.2.14 "feature"? I ask because we have clients
that still rely on the Cobalt build of 2.2.14.

Here is the long explonation...

I have a driver for a device that processes a steady stream of commands to
a PCI device. The calls come in on an ioctl and are send to the device.
While the command is being processed the user space process sleeps (in the
kernel). To prevent this sleep from waking up on non threatening
signals (like thread debugging) I added this code...

(sigmask(SIGKILL) | sigmask(SIGINT) | sigmask(SIGQUIT))

spin_lock_irqsave(&current->sigmask_lock, irqflags);
sigset = current->blocked;
siginitsetinv(&current->blocked, SHUTDOWN_SIGS & ~sigset.sig[0]);
spin_unlock_irqrestore(&current->sigmask_lock, irqflags);

It is executed before I put the task on a wait queue and set it's state to
TASK_INTERRUPTIBLE. After the command is finished the h/w interrupt will
wake up the waitqueue and the task will be set to TASK_RUNNING again.
Finally the following is done to restore the signal state.

spin_lock_irqsave(&current->sigmask_lock, irqflags);
current->blocked = sigset;
spin_unlock_irqrestore(&current->sigmask_lock, irqflags);

When I comment out these two blocks, or when I switch to 2.2.16 my problem
goes away.

Thanks for reading this far,


To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2005-03-22 12:54    [W:0.080 / U:0.036 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site