diff options
author | Thomas Haller <thaller@redhat.com> | 2017-11-24 12:47:59 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-11-27 15:21:58 +0100 |
commit | 5e5121a4838cd82537351b28fd027673e7a50ddd (patch) | |
tree | bf92708c4763c79a5808a8417118ad799b08582f | |
parent | 3a826a83df6b3cc36b2f57654864c3a37ca8ec25 (diff) | |
download | NetworkManager-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.c | 17 |
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 |