summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-11-24 12:47:59 +0100
committerThomas Haller <thaller@redhat.com>2017-11-27 15:21:58 +0100
commit5e5121a4838cd82537351b28fd027673e7a50ddd (patch)
treebf92708c4763c79a5808a8417118ad799b08582f
parent3a826a83df6b3cc36b2f57654864c3a37ca8ec25 (diff)
downloadNetworkManager-5e5121a4838cd82537351b28fd027673e7a50ddd.tar.gz
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.
-rw-r--r--src/nm-policy.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/nm-policy.c b/src/nm-policy.c
index 7cb8379587..f31b1cbb36 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -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