Messages in this thread | | | Date | Wed, 27 Jan 2016 09:44:43 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH] signals: work around random wakeups in sigsuspend() |
| |
On Tue, Jan 26, 2016 at 10:10:09PM +0100, Oleg Nesterov wrote:
> And, ironically, there is another more serious "reverse" problem ;) sigsuspend() > orany other user of -ERESTARTNOHAND can "miss" the signal, in a sense that the > kernel can wrongly restart this syscall after return from signal handler. This > is not trivial to fix..
So I'm not entirely sure I get what you mean there. But it did get me to look at the patch again:
+ while (!signal_pending(current)) { + __set_current_state(TASK_INTERRUPTIBLE); + schedule(); + }
That should very much be:
for (;;) { set_current_state(TASK_INTERRUPTIBLE); if (signal_pending(current)) break; schedule(); } __set_current_state(TASK_RUNNING);
| |