** Description changed:

+ ** SRU TEMPLATE DRAFT **
+ 
+ [Impact]
+ 
+ 
+ [Test Plan]
+ 
+ 
+ [Where problems could occur]
+ 
+ 
+ [Other Info]
+ 
+ 
+ [Original 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);
  +                       }
                  }
  
+ I believe the current behaviour is buggy. This is confirmed when the
+ following line is executed:
  
- I believe the current behaviour is buggy. This is confirmed when the 
following line is executed:
+                         if (loop_timeout >= 0 &&
+                             now.tv_sec - start >= loop_timeout) {
+                                 printf("IP-Config: no response after %d "
+                                        "secs - giving up\n", loop_timeout);
+                                 rc = -1;
+                                 goto bail;
+                         }
  
- 
-                         if (loop_timeout >= 0 &&
-                             now.tv_sec - start >= loop_timeout) {
-                                 printf("IP-Config: no response after %d "
-                                        "secs - giving up\n", loop_timeout);
-                                 rc = -1;
-                                 goto bail;
-                         }
- 
- 
- 'loop_timeout' is the user-specified time-out. With a value of 2, in case of 
error, this line prints: 
+ 'loop_timeout' is the user-specified time-out. With a value of 2, in
+ case of error, this line prints:
  
  IP-Config: no response after 2 secs - giving up
  
- 
- So it thinks that it waited 2 seconds - however, in reality it had actually 
waited for 10 seconds.
+ So it thinks that it waited 2 seconds - however, in reality it had
+ actually waited for 10 seconds.
  
  The suggested code-change ensures that the timeout that is actually used
  never exceeds the user-specified timeout.

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

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

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


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to