summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2008-11-27 09:46:28 +0000
committerRoy Marples <roy@marples.name>2008-11-27 09:46:28 +0000
commite61481a0165952aa68c7dc09af3f739da2e6acfa (patch)
treeec8a45680e8054b0f988d1486f89c0281a388407
parentcb9618ed639da252921e82f543b8ca3d38744679 (diff)
downloaddhcpcd-e61481a0165952aa68c7dc09af3f739da2e6acfa.tar.xz
If an interface link fd flaps, don't indiscriminately reset the timeout timer. Thanks to Jean Wolter for tracking it down.
-rw-r--r--client.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/client.c b/client.c
index 94567500..864957be 100644
--- a/client.c
+++ b/client.c
@@ -1736,7 +1736,6 @@ handle_link(struct if_state *state)
if (retval == 0)
return 0;
- timerclear(&state->timeout);
switch (carrier_status(state->interface->name)) {
case -1:
logger(LOG_ERR, "carrier_status: %s", strerror(errno));
@@ -1746,6 +1745,7 @@ handle_link(struct if_state *state)
logger(LOG_INFO, "carrier lost");
state->carrier = LINK_DOWN;
do_socket(state, SOCKET_CLOSED);
+ timerclear(&state->timeout);
if (state->state != STATE_BOUND)
timerclear(&state->stop);
}
@@ -1755,6 +1755,7 @@ handle_link(struct if_state *state)
logger(LOG_INFO, "carrier acquired");
state->state = STATE_RENEW_REQUESTED;
state->carrier = LINK_UP;
+ timerclear(&state->timeout);
timerclear(&state->stop);
return 1;
}