Restart waitpid after the pidfd-fork SIGUSR1

Merged
XA
3d ago
+1-0

test-pidfd-fork fails intermittently on the qemu-aarch64 lane with parent: child checks FAIL: child checks failed (errno=4), most recently on #436 (Runtime (Release) for dcdd563). The parent's SIGUSR1 handler lacks SA_RESTART, so when the child's pidfd_send_signal lands while the parent waits in waitpid(), the wait returns EINTR and reap_ok() reports the child as failed. The commit message has the interleaving.

Tested by running the test binary in a loop, unmodified and with this change:

  • qemu-aarch64 reference VM (6.12.103), 300 runs each: 166 failed before, 0 failed after.
  • elfuse, 50 runs each: 0 failed before and after, because the elfuse wait loops never return EINTR (#461).

make check passes on this branch. Based on main at c2785c7.


Summary by cubic

Fixes the intermittent test-pidfd-fork failure on qemu-aarch64 by adding SA_RESTART to the parent's SIGUSR1 handler so waitpid() resumes instead of failing with EINTR when the child signals through its pidfd.