X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=kernel%2Fcgroup.c;h=6d8de051382b0687ab1a449c245ebb2f05cd38f0;hb=e34ba212225a27cdf5f974be22cc539ae7ee7ca5;hp=2727f92383596e4a6f7bec5072b1e804a7801916;hpb=858c52d15f186e055dc33a1872f5b45a66d42296;p=linux-2.6 diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 2727f92383..6d8de05138 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -1722,7 +1722,12 @@ void cgroup_enable_task_cg_lists(void) use_task_css_set_links = 1; do_each_thread(g, p) { task_lock(p); - if (list_empty(&p->cg_list)) + /* + * We should check if the process is exiting, otherwise + * it will race with cgroup_exit() in that the list + * entry won't be deleted though the process has exited. + */ + if (!(p->flags & PF_EXITING) && list_empty(&p->cg_list)) list_add(&p->cg_list, &p->cgroups->tasks); task_unlock(p); } while_each_thread(g, p);