X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=kernel%2Ffreezer.c;h=bd1d42b17cb2f52f5156506ba25d75376102af7f;hb=054319b5e255c0671012a5a89b344a7d55cda80c;hp=2f4936cf708367c90f3d16fe5a4d9b49ec66e90e;hpb=00c2e63c31d0f431952ff2a671c5c6997dd4f8b2;p=safe%2Fjmp%2Flinux-2.6 diff --git a/kernel/freezer.c b/kernel/freezer.c index 2f4936c..bd1d42b 100644 --- a/kernel/freezer.c +++ b/kernel/freezer.c @@ -44,12 +44,19 @@ void refrigerator(void) recalc_sigpending(); /* We sent fake signal, clean it up */ spin_unlock_irq(¤t->sighand->siglock); + /* prevent accounting of that task to load */ + current->flags |= PF_FREEZING; + for (;;) { set_current_state(TASK_UNINTERRUPTIBLE); if (!frozen(current)) break; schedule(); } + + /* Remove the accounting blocker */ + current->flags &= ~PF_FREEZING; + pr_debug("%s left refrigerator\n", current->comm); __set_current_state(save); }