team: back off a little when re-spawning teamd

It might have dropped off for a reason (e.g. D-Bus itself has gone away,
because the system is transitioning from initrd to real root).

Give things a few seconds to cool off, just to be nice. That shouldn't
be a big deal, the link should still be operational.
This commit is contained in:
Lubomir Rintel 2022-08-31 10:55:56 +02:00
parent 7dccb5f548
commit 7a8cfd1467

View file

@ -39,6 +39,7 @@ typedef struct {
guint teamd_process_watch;
guint teamd_timeout;
guint teamd_read_timeout;
guint teamd_backoff;
guint teamd_dbus_watch;
bool kill_in_progress : 1;
GFileMonitor *usock_monitor;
@ -312,6 +313,7 @@ teamd_cleanup(NMDeviceTeam *self, gboolean free_tdc)
nm_clear_g_source(&priv->teamd_process_watch);
nm_clear_g_source(&priv->teamd_timeout);
nm_clear_g_source(&priv->teamd_read_timeout);
nm_clear_g_source(&priv->teamd_backoff);
if (priv->teamd_pid > 0) {
priv->kill_in_progress = TRUE;
@ -406,9 +408,10 @@ teamd_ready(NMDeviceTeam *self)
nm_device_activate_schedule_stage1_device_prepare(device, FALSE);
}
static void
teamd_gone(NMDeviceTeam *self)
static gboolean
teamd_backoff_cb(gpointer user_data)
{
NMDeviceTeam *self = NM_DEVICE_TEAM(user_data);
NMDevice *device = NM_DEVICE(self);
NMDeviceState state;
@ -423,6 +426,19 @@ teamd_gone(NMDeviceTeam *self)
NM_DEVICE_STATE_REASON_TEAMD_CONTROL_FAILED);
}
}
return G_SOURCE_REMOVE;
}
static void
teamd_gone(NMDeviceTeam *self)
{
/* Wait a little before respawning. Something unexpected has happened
* causing teamd to disappear and we need to be careful. Maybe a clumsy
* supervisor is just killing off all processes and it's not too nice
* if we respawn too quickly. */
NM_DEVICE_TEAM_GET_PRIVATE(self)->teamd_backoff =
g_timeout_add_seconds(5, teamd_backoff_cb, self);
}
static void