dhcp: nettools: move to failed state if event dispatch fails

This commit is contained in:
Beniamino Galvani 2020-02-07 11:00:48 +01:00
parent 43016d6ebd
commit 45521b1b38

View file

@ -1063,8 +1063,18 @@ dhcp4_event_cb (int fd,
int r;
r = n_dhcp4_client_dispatch (priv->client);
if (r < 0)
return G_SOURCE_CONTINUE;
if (r < 0) {
/* FIXME: if any operation (e.g. send()) fails during the
* dispatch, n-dhcp4 returns an error without arming timers
* or progressing state, so the only reasonable thing to do
* is to move to failed state so that the client will be
* restarted. Ideally n-dhcp4 should retry failed operations
* a predefined number of times (possibly infinite).
*/
_LOGE ("error %d dispatching events", r);
nm_dhcp_client_set_state (NM_DHCP_CLIENT (self), NM_DHCP_STATE_FAIL, NULL, NULL);
return G_SOURCE_REMOVE;
}
while (!n_dhcp4_client_pop_event (priv->client, &event) && event) {
dhcp4_event_handle (self, event);