[libc-commits] [PATCH] D76267: [libc] Resolve race condition in sub-process test runner.
Paula Toth via Phabricator via libc-commits
libc-commits at lists.llvm.org
Mon Mar 16 22:00:35 PDT 2020
PaulkaToast created this revision.
PaulkaToast added reviewers: sivachandra, abrachet.
PaulkaToast added a project: libc-project.
Herald added subscribers: libc-commits, tschuett, jfb, MaskRay.
There seems to be a race condition between the pipe closing and the child process death. Likely these two events are not atomic on some versions of linux.
With the removal of `WNOHANG` we eliminate the race condition, however if the child closes the pipe intentionally then it could result in the test runner hanging. I find this situation less likely, where as I experience failures locally with this race condition rather consistently.
rG LLVM Github Monorepo
@@ -67,8 +67,10 @@
int WStatus = 0;
- int status = ::waitpid(Pid, &WStatus, WNOHANG);
- assert(status == Pid && "wait call should not block here");
+ pid_t status = ::waitpid(Pid, &WStatus, 0);
+ if (status == -1)
+ return ProcessStatus::Error("waitpid(2) failed");
+ assert(status == Pid);
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 568 bytes
Desc: not available
More information about the libc-commits