On Thu, Aug 06, 2020 at 12:29:36AM +0300, Peter Pentchev wrote: > On Wed, Aug 05, 2020 at 10:52:31PM +0200, Michał Mirosław wrote: [...] > > Using print-debugging, I see that it stops at wait_for_child line just > > after printing the version. It seems that something is reaping the child > > before the main thread has a chance to wait for it. > > OK, so the only thing that comes to my mind now is that you may be > hitting a crazy, crazy race between register_child() and child_reaper(), > and I say "a crazy, crazy race", because the test has to (apparently > reproducibly) receive the CHLD signal exactly between the check and > the creation in register_child()'s first "$children{...} //= ...cv" > statement.
Well, there is nothing that prevents SIGCHLD arriving between fork() and register_child(). You could test this with more confidence (though not 100%-reliably) by putting 'exit 1' just at the start of ($pid == 0) branch. > Can you apply the following patch and show me the output of running > the test? Sure, but I got no patch. :-) Best Regards, Michał Mirosław