it seems that I missed something else... On 07/17, Joel Fernandes (Google) wrote: > > @@ -1156,10 +1157,11 @@ static int wait_task_zombie(struct wait_opts *wo, > struct task_struct *p) > ptrace_unlink(p); > > /* If parent wants a zombie, don't release it now */ > - state = EXIT_ZOMBIE; > + p->exit_state = EXIT_ZOMBIE; > if (do_notify_parent(p, p->exit_signal)) > - state = EXIT_DEAD; > - p->exit_state = state; > + p->exit_state = EXIT_DEAD; > + > + state = p->exit_state; > write_unlock_irq(&tasklist_lock);
why do you think we also need to change wait_task_zombie() ? pidfd_poll() only needs the exit_state != 0 check, we know that it is not zero at this point. Why do we need to change exit_state before do_notify_parent() ? Oleg.