summaryrefslogtreecommitdiff
path: root/src/core/devices/wifi/nm-device-iwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/devices/wifi/nm-device-iwd.c')
-rw-r--r--src/core/devices/wifi/nm-device-iwd.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/core/devices/wifi/nm-device-iwd.c b/src/core/devices/wifi/nm-device-iwd.c
index 95ade44b58..01f2a30396 100644
--- a/src/core/devices/wifi/nm-device-iwd.c
+++ b/src/core/devices/wifi/nm-device-iwd.c
@@ -588,10 +588,16 @@ deactivate(NMDevice *device)
return;
}
- cleanup_association_attempt(self, TRUE);
+ cleanup_association_attempt(self, FALSE);
priv->act_mode_switch = FALSE;
- if (!priv->dbus_station_proxy)
+ /* Don't trigger any actions on the IWD side until the device is managed */
+ if (priv->iwd_autoconnect && nm_device_get_state(device) < NM_DEVICE_STATE_DISCONNECTED)
+ return;
+
+ if (priv->dbus_station_proxy)
+ send_disconnect(self);
+ else
reset_mode(self, NULL, NULL, NULL);
}
@@ -647,6 +653,11 @@ deactivate_async(NMDevice * device,
cleanup_association_attempt(self, FALSE);
priv->act_mode_switch = FALSE;
+ if (priv->iwd_autoconnect && nm_device_get_state(device) < NM_DEVICE_STATE_DISCONNECTED) {
+ nm_utils_invoke_on_idle(cancellable, disconnect_cb_on_idle, user_data);
+ return;
+ }
+
if (priv->dbus_station_proxy) {
g_dbus_proxy_call(priv->dbus_station_proxy,
"Disconnect",