From df687b5ca86b93e0801db54ba4bca0f81ff02548 Mon Sep 17 00:00:00 2001 From: Kirill Isakov Date: Fri, 30 Jul 2021 16:46:00 +0600 Subject: [PATCH] Support running tests on NetBSD 8.2. --- test/testlib.sh.in | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/test/testlib.sh.in b/test/testlib.sh.in index c65bdde8..047db870 100644 --- a/test/testlib.sh.in +++ b/test/testlib.sh.in @@ -386,19 +386,26 @@ wait_script() { # group by enabling job control, but this results in weird behavior when # running tests in parallel on some interactive shells # (e.g. when /bin/sh is symlinked to dash). + fifo=$(mktemp) + rm -f "$fifo" + mkfifo "$fifo" + + # This weird thing is required to support old versions of ksh on NetBSD 8.2 and the like. + (tail -n +"$line" -f "$script_log" >"$fifo") & + new_line=$( try_limit_time 60 sh -c " - fifo=\$$.fifo - cleanup() { rm -f \$fifo; } - cleanup && trap cleanup EXIT - - mkfifo \$$.fifo - tail -n '+$line' -f '$script_log' >\$fifo & - grep -n -m '$count' '^$script,' <\$fifo - kill \$! + grep -n -m $count '^$script,' <'$fifo' " | awk -F: 'END { print $1 }' ) + # Try to stop the background tail, ignoring possible failure (some tails + # detect EOF, some don't, so it may have already exited), but do wait on + # it (which is required at least by old ksh). + kill $! || true + wait || true + rm -f "$fifo" + # Remember the next line number for future reference. We'll use it if # wait_script is called again with same $peer and $script. read -r "${line_var?}" <