[SV 63315] tests: Simplify TERM signaling

Tests that try to kill the make process were not behaving as expected
on OpenBSD: the signal was sent from make to its children but the
sleep didn't die.  Something odd about the way the shell treats TERM.
To reduce platform dependencies add "term" to the helper tool and run
that instead of kill / sleep.

* tests/thelp.pl: Add a new operation "term" that takes a PID.
* tests/scripts/features/output-sync: Use it.
* tests/scripts/features/temp_stdin: Ditto.
This commit is contained in:
Paul Smith 2022-11-06 14:14:28 -05:00
parent e80ce6fc90
commit deb4ff272a
3 changed files with 9 additions and 2 deletions

View file

@ -360,7 +360,7 @@ use POSIX ();
# file.
run_make_test(q!
pid:=$(shell echo $$PPID)
all:; @kill -TERM $(pid) && sleep 16
all:; @#HELPER# term $(pid) sleep 10
!, '-O -j2', '/#MAKE#: \*\*\* \[#MAKEFILE#:3: all] Terminated/', POSIX::SIGTERM);
}

View file

@ -71,7 +71,7 @@ run_make_test(q!
include bye.mk
pid:=$(shell echo $$PPID)
all:;
bye.mk: force; @kill -TERM $(pid) && sleep 16
bye.mk: force; @#HELPER# term $(pid) sleep 10
force:
!, '-f-', '/#MAKE#: \*\*\* \[#MAKEFILE#:5: bye.mk] Terminated/', POSIX::SIGTERM);
}

View file

@ -16,6 +16,7 @@
# wait <word> : wait for a file named <word> to exist
# tmout <secs> : Change the timeout for waiting. Default is 4 seconds.
# sleep <secs> : Sleep for <secs> seconds then echo <secs>
# term <pid> : send SIGTERM to PID <pid>
# fail <err> : echo <err> to stdout then exit with error code err
#
# If given -q only the "out" command generates output.
@ -95,6 +96,12 @@ sub op {
return 1;
}
if ($op eq 'term') {
print "term $nm\n";
kill('TERM', $nm);
return 1;
}
if ($op eq 'fail') {
print "fail $nm\n";
exit($nm);