as that's more useful in practice than reporting an error.
'0' means don't timeout. */
static void
-settimeout (double duration)
+settimeout (double duration, bool warn)
{
/* We configure timers below so that SIGALRM is sent on expiry.
return;
else
{
- error (0, errno, _("warning: timer_settime"));
+ if (warn)
+ error (0, errno, _("warning: timer_settime"));
timer_delete (timerid);
}
}
- else if (errno != ENOSYS)
+ else if (warn && errno != ENOSYS)
error (0, errno, _("warning: timer_create"));
#endif
{
if (kill_after)
{
+ int saved_errno = errno; /* settimeout may reset. */
/* Start a new timeout after which we'll send SIGKILL. */
term_signal = SIGKILL;
- settimeout (kill_after);
+ settimeout (kill_after, false);
kill_after = 0; /* Don't let later signals reset kill alarm. */
+ errno = saved_errno;
}
/* Send the signal directly to the monitored child,
pid_t wait_result;
int status;
- settimeout (timeout);
+ settimeout (timeout, true);
while ((wait_result = waitpid (monitored_pid, &status, 0)) < 0
&& errno == EINTR)