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

Reply via email to