Messages in this thread | | | Date | Thu, 29 Sep 2011 14:05:17 +0200 | From | Oleg Nesterov <> | Subject | Re: [patch] oom: thaw threads if oom killed thread is frozen before deferring |
| |
On 09/29, Michal Hocko wrote: > > --- a/kernel/freezer.c > +++ b/kernel/freezer.c > @@ -48,6 +48,10 @@ void refrigerator(void) > current->flags |= PF_FREEZING; > > for (;;) { > + if (fatal_signal_pending(current)) { > + current->flags &= ~PF_FROZEN;
We can't do this.
If PF_FROZEN was set, we must not modify current->flags, this can race with, say, thaw_process().
OK, we can take task_lock(), but this doesn't close other races. Say, a SIGKILL'ed task can do try_to_freeze(). Perhaps we should simply call thaw_process() unconditionally, this also clears TIF_FREEZE. Or check freezing() || frozen(). Afacis this solves the race you described.
But of course this can't help if freeze_task() is called later. May be freezable() should check TIF_MEMDIE...
Oleg.
| |