Follow-up Comment #5, bug #61079 (project groff):
[comment #4 comment #4:] > My "make check" returned FAIL again. > > I checked it three times with and without -j and all caused > FAIL. > > As it looked like a race condition I checked three times with > "sleep 5" between the commands and equally often with "sleep 1" with a > PASS result in all cases. > > The sequence of the commands is necessary for a right result, > so the shell must be told to do so. > > The script uses: > > echo | "$groff" >&- > ! test -e core > > As the first line returns false, > adding " || \" to that line should insure that it will be executed first > and finished before next line is executed. Multiprocessing is explicit in shell scripts, not done opportunistically. Separate commands or pipelines are not run simultaneously in a shell script unless (1) at least one is backgrounded and (2) an execution core is available to do so. > If the command in the first line would return true, > then the next line is superfluous. This is unfortunately not true; groff can fail and even core dump while still exiting with status 0. See bug #60782. But even if it were true, because this test script does not run "set -e", it executes the test command regardless of the exit status of groff in the previous line. I think you're proceeding from some bad assumptions here, and therefore I do not have confidence in your analysis. You could change the last line to: test -e core && sleep 10000 and run "make check" without "-j" to force the test harness to stop as soon as a problem is observed. In fact, you might put the above line _before_ the groff command, too, to make sure the test is not tripping on a core file left by a different execution altogether. _______________________________________________________ Reply to this item at: <https://savannah.gnu.org/bugs/?61079> _______________________________________________ Message sent via Savannah https://savannah.gnu.org/