From 7ede354ee9b65257e6714ccdfe32bbabf9904c82 Mon Sep 17 00:00:00 2001 From: Packit Service Date: Apr 07 2021 22:22:21 +0000 Subject: Apply patch 1005-fix-managing-devices-after-sleep-rh1855563.patch patch_name: 1005-fix-managing-devices-after-sleep-rh1855563.patch present_in_specfile: true location_in_specfile: 7 --- diff --git a/src/nm-manager.c b/src/nm-manager.c index 9211253..d687fcd 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -6048,8 +6048,9 @@ do_sleep_wake (NMManager *self, gboolean sleeping_changed) } else { _LOGD (LOGD_SUSPEND, "sleep: %s...", waking_from_suspend ? "waking up" : "re-enabling"); + sleep_devices_clear (self); + if (waking_from_suspend) { - sleep_devices_clear (self); c_list_for_each_entry (device, &priv->devices_lst_head, devices_lst) { if (nm_device_is_software (device)) continue; diff --git a/src/nm-policy.c b/src/nm-policy.c index 62ead24..e571034 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -1787,7 +1787,7 @@ device_state_changed (NMDevice *device, if ( sett_conn && old_state >= NM_DEVICE_STATE_PREPARE && old_state <= NM_DEVICE_STATE_ACTIVATED) { - gboolean block_no_secrets = FALSE; + gboolean blocked = FALSE; int tries; guint64 con_v; @@ -1807,15 +1807,32 @@ device_state_changed (NMDevice *device, */ con_v = nm_settings_connection_get_last_secret_agent_version_id (sett_conn); if ( con_v == 0 - || con_v == nm_agent_manager_get_agent_version_id (priv->agent_mgr)) - block_no_secrets = TRUE; + || con_v == nm_agent_manager_get_agent_version_id (priv->agent_mgr)) { + _LOGD (LOGD_DEVICE, "connection '%s' now blocked from autoconnect due to no secrets", + nm_settings_connection_get_id (sett_conn)); + nm_settings_connection_autoconnect_blocked_reason_set (sett_conn, + NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_NO_SECRETS, + TRUE); + blocked = TRUE; + } + } else if (nm_device_state_reason_check (reason) == NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED) { + /* A connection that fails due to dependency-failed is not + * able to reconnect until the master connection activates + * again; when this happens, the master clears the blocked + * reason for all its slaves in activate_slave_connections() + * and tries to reconnect them. For this to work, the slave + * should be marked as blocked when it fails with + * dependency-failed. + */ + _LOGD (LOGD_DEVICE, "connection '%s' now blocked from autoconnect due to failed dependency", + nm_settings_connection_get_id (sett_conn)); + nm_settings_connection_autoconnect_blocked_reason_set (sett_conn, + NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_FAILED, + TRUE); + blocked = TRUE; } - if (block_no_secrets) { - _LOGD (LOGD_DEVICE, "connection '%s' now blocked from autoconnect due to no secrets", - nm_settings_connection_get_id (sett_conn)); - nm_settings_connection_autoconnect_blocked_reason_set (sett_conn, NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_NO_SECRETS, TRUE); - } else { + if (!blocked) { tries = nm_settings_connection_autoconnect_retries_get (sett_conn); if (tries > 0) { _LOGD (LOGD_DEVICE, "connection '%s' failed to autoconnect; %d tries left",