From 5e5121a4838cd82537351b28fd027673e7a50ddd Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 24 Nov 2017 12:47:59 +0100 Subject: [PATCH] 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. --- src/nm-policy.c | 17 ++++++++++++----- 1 file 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