policy: only selectively schedule autoconnect check in activate_slave_connections()

schedule_activate_all() is expensive. It iterates over all devices, and asks
them to autoactivated (which might involve iterating over all connections for
each device). Avoid it if nothing changed.

(cherry picked from commit 5e5121a483)
This commit is contained in:
Thomas Haller 2017-11-24 12:47:59 +01:00
parent 632bb9524e
commit 76560639ba

View file

@ -1568,6 +1568,7 @@ activate_slave_connections (NMPolicy *self, NMDevice *device)
NMActRequest *req;
gboolean internal_activation = FALSE;
NMSettingsConnection *const*connections;
gboolean changed;
master_device = nm_device_get_iface (device);
g_assert (master_device);
@ -1591,6 +1592,7 @@ activate_slave_connections (NMPolicy *self, NMDevice *device)
internal_activation = subject && nm_auth_subject_is_internal (subject);
}
changed = FALSE;
connections = nm_settings_get_connections (priv->settings, NULL);
for (i = 0; connections[i]; i++) {
NMSettingsConnection *connection = connections[i];
@ -1606,14 +1608,19 @@ activate_slave_connections (NMPolicy *self, NMDevice *device)
master_uuid_settings))
continue;
if (!internal_activation)
if (!internal_activation) {
if (nm_settings_connection_autoconnect_retries_get (connection) == 0)
changed = TRUE;
nm_settings_connection_autoconnect_retries_reset (connection);
nm_settings_connection_autoconnect_blocked_reason_set (connection,
NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_FAILED,
FALSE);
}
if (nm_settings_connection_autoconnect_blocked_reason_set (connection,
NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_FAILED,
FALSE))
changed = TRUE;
}
schedule_activate_all (self);
if (changed)
schedule_activate_all (self);
}
static gboolean