dhclient - Cancel all timeouts in state_reboot().
authorAntonio Huete Jimenez <tuxillo@quantumachine.net>
Sat, 4 Aug 2012 18:59:03 +0000 (20:59 +0200)
committerAntonio Huete Jimenez <tuxillo@quantumachine.net>
Wed, 15 Aug 2012 01:22:19 +0000 (03:22 +0200)
- We can get there from any state if a link state change happens.
  Fixes a problem where we'd continue to send (corrupted) discover
  packets after binding.

Taken-from: OpenBSD

sbin/dhclient/dhclient.c

index 816ba2c..e956f5e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/sbin/dhclient/dhclient.c,v 1.142 2011/12/10 15:55:43 krw Exp $    */
+/*     $OpenBSD: src/sbin/dhclient/dhclient.c,v 1.143 2012/06/20 21:53:51 kettenis Exp $       */
 
 /*
  * Copyright 2004 Henning Brauer <henning@openbsd.org>
@@ -452,6 +452,14 @@ usage(void)
 void
 state_reboot(void)
 {
+       /* Cancel all timeouts, since a link state change gets us here
+          and can happen anytime. */
+       cancel_timeout(state_init);
+       cancel_timeout(state_selecting);
+       cancel_timeout(state_bound);
+       cancel_timeout(send_discover);
+       cancel_timeout(send_request);
+
        /* If we don't remember an active lease, go straight to INIT. */
        if (!client->active || client->active->is_bootp) {
                state_init();