Messages in this thread | | | Date | Sat, 23 Feb 2013 20:41:25 +0100 | From | Oleg Nesterov <> | Subject | Re: [PATCH 4/5] freezer: clear fake signal on exit from __refrigerator |
| |
On 02/20, Mandeep Singh Baines wrote: > > I think we need something like this in order to be able to fix > wait_event_freezable and friends. Here is one idea: > > #define __wait_event_freezable(wq, condition, ret) \ > do { \ > DEFINE_WAIT(__wait); \ > \ > for (;;) { \ > prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ > if (condition) \ > break; \ > if (!signal_pending(current)) { \ > freezable_schedule();
...
> If you cleaned up the fake signal in __refrigerator()
Perhaps. Or we can add recalc_sigpending into wait_freezable(). But note that
if (!signal_pending(current)) freezable_schedule();
is not actually right, wait_event_freezable() should be interruptible, but not by freezer.
And let me repeat, as for coredump this can only solve the problems in wait_for_dump_handler(). As for other users, I simply do not see any valid user today, so perhaps wait_event_freezable() should die... Or I missed something.
I'll try to make the coredumping fixes tomorrow, then we discuss this again.
Oleg.
| |