Public bug reported:

In some cases, ipconfig can take longer than the user-specified
timeouts, causing unexpected delays.

in main.c, in function loop(), the process can go into
process_timeout_event() (or process_receive_event() ) and if it
encounters an error situation, will set an attempt to "try again later"
at time equal now + 10 seconds by setting

s->expire = now + 10;


This can happen at any time during the main event loop, which can end up 
extending the user-specified timeout if "now + 10" is greater than "start_time 
+ user-specified-timeout".

I believe a patch like the following is needed to avoid this problem:

--- a/usr/kinit/ipconfig/main.c
+++ b/usr/kinit/ipconfig/main.c
@@ -437,6 +437,13 @@ static int loop(void)

                        if (timeout > s->expire - now.tv_sec)
                                timeout = s->expire - now.tv_sec;
+
+                       /* Compensate for already-lost time */
+                       gettimeofday(&now, NULL);
+                       if (now.tv_sec + timeout > start + loop_timeout) {
+                               timeout = loop_timeout - (now.tv_sec - start);
+                               printf("Lowered timeout to match user request = 
(%d s) \n", timeout);
+                       }
                }

** Affects: klibc (Ubuntu)
     Importance: Undecided
         Status: New

** Affects: klibc (Ubuntu Bionic)
     Importance: Undecided
         Status: New

** Also affects: klibc (Ubuntu Bionic)
   Importance: Undecided
       Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to klibc in Ubuntu.
https://bugs.launchpad.net/bugs/1947099

Title:
  ipconfig does not honour user-requested timeouts in some cases

Status in klibc package in Ubuntu:
  New
Status in klibc source package in Bionic:
  New

Bug description:
  In some cases, ipconfig can take longer than the user-specified
  timeouts, causing unexpected delays.

  in main.c, in function loop(), the process can go into
  process_timeout_event() (or process_receive_event() ) and if it
  encounters an error situation, will set an attempt to "try again
  later" at time equal now + 10 seconds by setting

  s->expire = now + 10;

  
  This can happen at any time during the main event loop, which can end up 
extending the user-specified timeout if "now + 10" is greater than "start_time 
+ user-specified-timeout".

  I believe a patch like the following is needed to avoid this problem:

  --- a/usr/kinit/ipconfig/main.c
  +++ b/usr/kinit/ipconfig/main.c
  @@ -437,6 +437,13 @@ static int loop(void)

                          if (timeout > s->expire - now.tv_sec)
                                  timeout = s->expire - now.tv_sec;
  +
  +                       /* Compensate for already-lost time */
  +                       gettimeofday(&now, NULL);
  +                       if (now.tv_sec + timeout > start + loop_timeout) {
  +                               timeout = loop_timeout - (now.tv_sec - start);
  +                               printf("Lowered timeout to match user request 
= (%d s) \n", timeout);
  +                       }
                  }

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/klibc/+bug/1947099/+subscriptions


-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to