Applied, thank you.
On Mon, Apr 8, 2024 at 2:12 PM Ron Yorston <[email protected]> wrote: > > The 'timeout' applet uses parse_duration_str() to obtain its > timeout values. The default configuration enables float durations. > > However, the applet silently ignores fractional seconds. This > results in unexpected behaviour: > > $ timeout 5.99 sleep 5.1; echo $? > Terminated > 143 > > When float durations are enabled ensure that any fractional seconds > are taken into account. > > function old new delta > timeout_wait 44 92 +48 > timeout_main 383 365 -18 > ------------------------------------------------------------------------------ > (add/remove: 0/0 grow/shrink: 1/1 up/down: 48/-18) Total: 30 bytes > > Signed-off-by: Ron Yorston <[email protected]> > --- > coreutils/timeout.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/coreutils/timeout.c b/coreutils/timeout.c > index 18aa9ebeb..84299a0a5 100644 > --- a/coreutils/timeout.c > +++ b/coreutils/timeout.c > @@ -47,11 +47,16 @@ > > #include "libbb.h" > > -static NOINLINE int timeout_wait(int timeout, pid_t pid) > +static NOINLINE int timeout_wait(duration_t timeout, pid_t pid) > { > /* Just sleep(HUGE_NUM); kill(parent) may kill wrong process! */ > while (1) { > - sleep1(); > +#if ENABLE_FLOAT_DURATION > + if (timeout < 1) > + sleep_for_duration(timeout); > + else > +#endif > + sleep1(); > if (--timeout <= 0) > break; > if (kill(pid, 0)) { > @@ -68,8 +73,8 @@ int timeout_main(int argc UNUSED_PARAM, char **argv) > int signo; > int status; > int parent = 0; > - int timeout; > - int kill_timeout; > + duration_t timeout; > + duration_t kill_timeout; > pid_t pid; > #if !BB_MMU > char *sv1, *sv2; > -- > 2.44.0 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
