mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-03-01 01:00:33 +01:00
wifi: auto-activate devices as soon as the first scan finishes
Currently if we detect that a scan finished in _scan_notify_is_scanning(), we call immediately _scan_kickoff() (which might start a new scan) and then we check again whether the device can autoactivate or whether to remove the wifi-scan pending action. This means that if the scan takes long enough, when _scan_notify_is_scanning() is called, it is already time to start another scan and the device activation will be delayed. It will be delayed until the scan duration becomes shorter than the exponentially-growing periodic scan interval. Fix this by delaying the next scan immediately after a scan result. Co-authored-by: Thomas Haller <thaller@redhat.com> https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/574 (cherry picked from commit16d649ea92) (cherry picked from commit94044c7441)
This commit is contained in:
parent
cdbd6bd9e1
commit
5454681ab7
1 changed files with 17 additions and 0 deletions
|
|
@ -1731,6 +1731,23 @@ _scan_kickoff (NMDeviceWifi *self)
|
|||
return;
|
||||
}
|
||||
|
||||
if (priv->scan_last_complete_msec + 200 > now_msec) {
|
||||
gint32 timeout_msec = priv->scan_last_complete_msec + 200 - now_msec;
|
||||
|
||||
/* after a scan just completed, it is ratelimited for another 200 msec. This is in
|
||||
* addition to our rate limiting above (where scanning can take longer than our rate limit
|
||||
* duration).
|
||||
*
|
||||
* This gives the device a chance to autoconnect. Also, if a scanning just completed,
|
||||
* we want to back off a bit before starting again. */
|
||||
_LOGT_scan ("kickoff: don't scan (rate limited for another %d.%03d sec after previous scan)",
|
||||
timeout_msec / 1000,
|
||||
timeout_msec % 1000);
|
||||
nm_clear_g_source (&priv->scan_kickoff_timeout_id);
|
||||
priv->scan_kickoff_timeout_id = g_timeout_add (timeout_msec, _scan_kickoff_timeout_cb, self);
|
||||
return;
|
||||
}
|
||||
|
||||
if (priv->scan_explicit_requested) {
|
||||
if (!priv->scan_explicit_allowed) {
|
||||
_LOGT_scan ("kickoff: don't scan (explicit scan requested but not allowed)");
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue