On 04/29, Joel Fernandes wrote: > > However, in your code above, it is avoided because we get: > > Task A (poller) Task B (exiting task being polled) > ------------ ---------------- > poll() called > add_wait_queue() > exit_state is set to non-zero > read exit_state > remove_wait_queue() > wake_up_all() just to clarify... No, sys_poll() path doesn't do remove_wait_queue() until it returns to user mode, and that is why we can't race with set-exit_code + wake_up(). pidfd_poll() can race with the exiting task, miss exit_code != 0, and return zero. However, do_poll() won't block after that and pidfd_poll() will be called again. Oleg.