* src/timeout.c (cleanup): Reset the default exit status
to EXIT_TIMEDOUT, if we have in fact received an ALARM.
Otherwise we would exit with status EXIT_CANCELED if
there was an issue writing --verbose output for example.
This also ensures a consistent exit status with ASAN enabled,
as with ASAN stderr is not explicitly closed by gnulib's
close_stdout handler.
if (sig == SIGALRM)
{
timed_out = 1;
+ /* In case there is an issue with close_stdout,
+ update to a more accurate default exit status.
+ For example we might get failed writes with -v with:
+ timeout -v 1 sleep 10 2>&1 | :
+ */
+ initialize_exit_failure (EXIT_TIMEDOUT);
sig = term_signal;
}
if (0 < monitored_pid)
# Specifically here we're testing that SIGPIPE is handled.
# I.e., that we're not killed by the SIGPIPE (and leave the sleep running).
# timeout would exit with 141 usually if SIGPIPE wasn't being handled.
-echo 125 > timeout.exp || framework_failure_
+echo 124 > timeout.exp || framework_failure_
{ timeout -v .1 sleep 10 2>&1; echo $? >timeout.status; } | :
compare timeout.exp timeout.status || fail=1
# Ensure we don't catch/propagate ignored signals