mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-20 07:00:05 +01:00
merge: branch 'ih/fix-wifi-dispose'
wifi: don't recheck auto-activate on disposal Closes #1791 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2259
This commit is contained in:
commit
d39179bee4
1 changed files with 31 additions and 20 deletions
|
|
@ -196,7 +196,8 @@ static void periodic_update(NMDeviceWifi *self);
|
||||||
static void ap_add_remove(NMDeviceWifi *self,
|
static void ap_add_remove(NMDeviceWifi *self,
|
||||||
gboolean is_adding,
|
gboolean is_adding,
|
||||||
NMWifiAP *ap,
|
NMWifiAP *ap,
|
||||||
gboolean recheck_available_connections);
|
gboolean recheck_available_connections,
|
||||||
|
gboolean recheck_auto_activate);
|
||||||
|
|
||||||
static void _hw_addr_set_scanning(NMDeviceWifi *self, gboolean do_reset);
|
static void _hw_addr_set_scanning(NMDeviceWifi *self, gboolean do_reset);
|
||||||
|
|
||||||
|
|
@ -714,7 +715,10 @@ update_seen_bssids_cache(NMDeviceWifi *self, NMWifiAP *ap)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_current_ap(NMDeviceWifi *self, NMWifiAP *new_ap, gboolean recheck_available_connections)
|
set_current_ap(NMDeviceWifi *self,
|
||||||
|
NMWifiAP *new_ap,
|
||||||
|
gboolean recheck_available_connections,
|
||||||
|
gboolean recheck_auto_activate)
|
||||||
{
|
{
|
||||||
NMDeviceWifiPrivate *priv;
|
NMDeviceWifiPrivate *priv;
|
||||||
NMWifiAP *old_ap;
|
NMWifiAP *old_ap;
|
||||||
|
|
@ -741,7 +745,11 @@ set_current_ap(NMDeviceWifi *self, NMWifiAP *new_ap, gboolean recheck_available_
|
||||||
/* Remove any AP from the internal list if it was created by NM or isn't known to the supplicant */
|
/* Remove any AP from the internal list if it was created by NM or isn't known to the supplicant */
|
||||||
if (NM_IN_SET(mode, _NM_802_11_MODE_ADHOC, _NM_802_11_MODE_AP)
|
if (NM_IN_SET(mode, _NM_802_11_MODE_ADHOC, _NM_802_11_MODE_AP)
|
||||||
|| nm_wifi_ap_get_fake(old_ap))
|
|| nm_wifi_ap_get_fake(old_ap))
|
||||||
ap_add_remove(self, FALSE, old_ap, recheck_available_connections);
|
ap_add_remove(self,
|
||||||
|
FALSE,
|
||||||
|
old_ap,
|
||||||
|
recheck_available_connections,
|
||||||
|
recheck_auto_activate);
|
||||||
g_object_unref(old_ap);
|
g_object_unref(old_ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -814,7 +822,8 @@ static void
|
||||||
ap_add_remove(NMDeviceWifi *self,
|
ap_add_remove(NMDeviceWifi *self,
|
||||||
gboolean is_adding, /* or else removing */
|
gboolean is_adding, /* or else removing */
|
||||||
NMWifiAP *ap,
|
NMWifiAP *ap,
|
||||||
gboolean recheck_available_connections)
|
gboolean recheck_available_connections,
|
||||||
|
gboolean recheck_auto_activate)
|
||||||
{
|
{
|
||||||
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE(self);
|
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE(self);
|
||||||
|
|
||||||
|
|
@ -845,13 +854,14 @@ ap_add_remove(NMDeviceWifi *self,
|
||||||
nm_dbus_object_clear_and_unexport(&ap);
|
nm_dbus_object_clear_and_unexport(&ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
nm_device_recheck_auto_activate_schedule(NM_DEVICE(self));
|
if (recheck_auto_activate)
|
||||||
|
nm_device_recheck_auto_activate_schedule(NM_DEVICE(self));
|
||||||
if (recheck_available_connections)
|
if (recheck_available_connections)
|
||||||
nm_device_recheck_available_connections(NM_DEVICE(self));
|
nm_device_recheck_available_connections(NM_DEVICE(self));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
remove_all_aps(NMDeviceWifi *self)
|
remove_all_aps(NMDeviceWifi *self, gboolean disposing)
|
||||||
{
|
{
|
||||||
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE(self);
|
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE(self);
|
||||||
NMWifiAP *ap;
|
NMWifiAP *ap;
|
||||||
|
|
@ -859,12 +869,13 @@ remove_all_aps(NMDeviceWifi *self)
|
||||||
if (c_list_is_empty(&priv->aps_lst_head))
|
if (c_list_is_empty(&priv->aps_lst_head))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
set_current_ap(self, NULL, FALSE);
|
set_current_ap(self, NULL, FALSE, !disposing);
|
||||||
|
|
||||||
while ((ap = c_list_first_entry(&priv->aps_lst_head, NMWifiAP, aps_lst)))
|
while ((ap = c_list_first_entry(&priv->aps_lst_head, NMWifiAP, aps_lst)))
|
||||||
ap_add_remove(self, FALSE, ap, FALSE);
|
ap_add_remove(self, FALSE, ap, FALSE, !disposing);
|
||||||
|
|
||||||
nm_device_recheck_available_connections(NM_DEVICE(self));
|
if (!disposing)
|
||||||
|
nm_device_recheck_available_connections(NM_DEVICE(self));
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
@ -951,7 +962,7 @@ deactivate(NMDevice *device)
|
||||||
|
|
||||||
priv->rate = 0;
|
priv->rate = 0;
|
||||||
|
|
||||||
set_current_ap(self, NULL, TRUE);
|
set_current_ap(self, NULL, TRUE, TRUE);
|
||||||
|
|
||||||
if (!wake_on_wlan_restore(self))
|
if (!wake_on_wlan_restore(self))
|
||||||
_LOGW(LOGD_DEVICE | LOGD_WIFI, "Cannot unconfigure WoWLAN.");
|
_LOGW(LOGD_DEVICE | LOGD_WIFI, "Cannot unconfigure WoWLAN.");
|
||||||
|
|
@ -2000,7 +2011,7 @@ supplicant_iface_bss_changed_cb(NMSupplicantInterface *iface,
|
||||||
if (nm_wifi_ap_set_fake(found_ap, TRUE))
|
if (nm_wifi_ap_set_fake(found_ap, TRUE))
|
||||||
_ap_dump(self, LOGL_DEBUG, found_ap, "updated", 0);
|
_ap_dump(self, LOGL_DEBUG, found_ap, "updated", 0);
|
||||||
} else {
|
} else {
|
||||||
ap_add_remove(self, FALSE, found_ap, TRUE);
|
ap_add_remove(self, FALSE, found_ap, TRUE, TRUE);
|
||||||
schedule_ap_list_dump(self);
|
schedule_ap_list_dump(self);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
@ -2043,7 +2054,7 @@ supplicant_iface_bss_changed_cb(NMSupplicantInterface *iface,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ap_add_remove(self, TRUE, ap, TRUE);
|
ap_add_remove(self, TRUE, ap, TRUE, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update the current AP if the supplicant notified a current BSS change
|
/* Update the current AP if the supplicant notified a current BSS change
|
||||||
|
|
@ -2268,7 +2279,7 @@ link_timeout_cb(gpointer user_data)
|
||||||
if (nm_device_get_state(device) != NM_DEVICE_STATE_ACTIVATED)
|
if (nm_device_get_state(device) != NM_DEVICE_STATE_ACTIVATED)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
set_current_ap(self, NULL, TRUE);
|
set_current_ap(self, NULL, TRUE, TRUE);
|
||||||
|
|
||||||
nm_device_state_changed(device,
|
nm_device_state_changed(device,
|
||||||
NM_DEVICE_STATE_FAILED,
|
NM_DEVICE_STATE_FAILED,
|
||||||
|
|
@ -2684,7 +2695,7 @@ supplicant_iface_notify_current_bss(NMSupplicantInterface *iface,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set_current_ap(self, new_ap, TRUE);
|
set_current_ap(self, new_ap, TRUE, TRUE);
|
||||||
|
|
||||||
req = nm_device_get_act_request(NM_DEVICE(self));
|
req = nm_device_get_act_request(NM_DEVICE(self));
|
||||||
if (req) {
|
if (req) {
|
||||||
|
|
@ -3118,7 +3129,7 @@ act_stage1_prepare(NMDevice *device, NMDeviceStateReason *out_failure_reason)
|
||||||
priv->mode = _NM_802_11_MODE_AP;
|
priv->mode = _NM_802_11_MODE_AP;
|
||||||
|
|
||||||
/* Scanning not done in AP mode; clear the scan list */
|
/* Scanning not done in AP mode; clear the scan list */
|
||||||
remove_all_aps(self);
|
remove_all_aps(self, FALSE);
|
||||||
} else if (g_strcmp0(mode, NM_SETTING_WIRELESS_MODE_MESH) == 0)
|
} else if (g_strcmp0(mode, NM_SETTING_WIRELESS_MODE_MESH) == 0)
|
||||||
priv->mode = _NM_802_11_MODE_MESH;
|
priv->mode = _NM_802_11_MODE_MESH;
|
||||||
_notify(self, PROP_MODE);
|
_notify(self, PROP_MODE);
|
||||||
|
|
@ -3155,14 +3166,14 @@ act_stage1_prepare(NMDevice *device, NMDeviceStateReason *out_failure_reason)
|
||||||
nm_wifi_ap_set_address(ap_fake, nm_device_get_hw_address(device));
|
nm_wifi_ap_set_address(ap_fake, nm_device_get_hw_address(device));
|
||||||
|
|
||||||
g_object_freeze_notify(G_OBJECT(self));
|
g_object_freeze_notify(G_OBJECT(self));
|
||||||
ap_add_remove(self, TRUE, ap_fake, TRUE);
|
ap_add_remove(self, TRUE, ap_fake, TRUE, TRUE);
|
||||||
g_object_thaw_notify(G_OBJECT(self));
|
g_object_thaw_notify(G_OBJECT(self));
|
||||||
ap = ap_fake;
|
ap = ap_fake;
|
||||||
}
|
}
|
||||||
|
|
||||||
_scan_notify_allowed(self, NM_TERNARY_DEFAULT);
|
_scan_notify_allowed(self, NM_TERNARY_DEFAULT);
|
||||||
|
|
||||||
set_current_ap(self, ap, FALSE);
|
set_current_ap(self, ap, FALSE, TRUE);
|
||||||
nm_active_connection_set_specific_object(NM_ACTIVE_CONNECTION(req),
|
nm_active_connection_set_specific_object(NM_ACTIVE_CONNECTION(req),
|
||||||
nm_dbus_object_get_path(NM_DBUS_OBJECT(ap)));
|
nm_dbus_object_get_path(NM_DBUS_OBJECT(ap)));
|
||||||
return NM_ACT_STAGE_RETURN_SUCCESS;
|
return NM_ACT_STAGE_RETURN_SUCCESS;
|
||||||
|
|
@ -3528,7 +3539,7 @@ device_state_changed(NMDevice *device,
|
||||||
|
|
||||||
cleanup_association_attempt(self, TRUE);
|
cleanup_association_attempt(self, TRUE);
|
||||||
cleanup_supplicant_failures(self);
|
cleanup_supplicant_failures(self);
|
||||||
remove_all_aps(self);
|
remove_all_aps(self, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (new_state) {
|
switch (new_state) {
|
||||||
|
|
@ -3566,7 +3577,7 @@ device_state_changed(NMDevice *device,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clear_aps)
|
if (clear_aps)
|
||||||
remove_all_aps(self);
|
remove_all_aps(self, FALSE);
|
||||||
|
|
||||||
_scan_notify_allowed(self, NM_TERNARY_DEFAULT);
|
_scan_notify_allowed(self, NM_TERNARY_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
@ -3808,7 +3819,7 @@ dispose(GObject *object)
|
||||||
|
|
||||||
g_clear_object(&priv->sup_mgr);
|
g_clear_object(&priv->sup_mgr);
|
||||||
|
|
||||||
remove_all_aps(self);
|
remove_all_aps(self, TRUE);
|
||||||
|
|
||||||
if (priv->p2p_device) {
|
if (priv->p2p_device) {
|
||||||
/* Destroy the P2P device. */
|
/* Destroy the P2P device. */
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue