1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-16 19:15:07 +00:00

Shell: Make the ENSURE_WAITID_ONCE requirements a bit less strict

waitid() *may* be called many times if a job does not exit, so only
assert this fact when the job has in fact exited.
Also allows Background nodes to contain non-execute nodes.
This commit is contained in:
AnotherTest 2020-10-26 02:28:15 +03:30 committed by Andreas Kling
parent 8de70e8ce7
commit 9ad858bcbf
2 changed files with 11 additions and 3 deletions

View file

@ -1443,7 +1443,16 @@ void Shell::notify_child_event()
}
found_child = true;
#ifdef ENSURE_WAITID_ONCE
s_waited_for_pids.set(child_pid);
// NOTE: This check is here to find bugs about our assumptions about waitpid(),
// it does not hold in general, and it definitely does not hold in the long run.
// Reasons that we would call waitpid() more than once:
// - PID reuse/wraparound: This will simply fail the assertion, ignored here.
// - Non-terminating unblocks:
// - Suspension: (e.g. via ^Z)
// - ?
// - ?
if (job.exited())
s_waited_for_pids.set(child_pid);
#endif
}
if (job.should_be_disowned())