Messages in this thread | | | Date | Tue, 1 Nov 2011 19:13:29 +0100 | From | Oleg Nesterov <> | Subject | Re: [RFC PATCH] freezer: revert 27920651fe "PM / Freezer: Make fake_signal_wake_up() wake TASK_KILLABLE tasks too" |
| |
On 11/01, Tejun Heo wrote: > > Yeah yeah, Trond already pointed it out. I forgot about the > sigpending special case in schedule(), which I think is rather odd,
I disagree with "rather odd" ;)
We have a lot of examples of
current->state = TASK_INTERRUPTIBLE; ... if (signal_pending()) break; schedule();
Without that special case in schedule() the code above becomes racy. Just consider __wait_event_interruptible().
> Any better ideas?
Well. As a simple (probably temporary) fix, I'd suggest
#define wait_event_freezekillable(wq, condition) { freezer_do_not_count(); __retval = wait_event_killable(condition); freezer_count(); __retval; }
Do you think it can work?
Oleg.
| |