From 0ad6faeeaaf9f46b6245835df505d76c8cf6de00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Tue, 9 Apr 2024 17:26:39 +0200 Subject: [PATCH] wifi: fix using out-dated scan timer Commit 'wifi_drv: re-arm scan timer when enabled again' allowed for re-arming the scan timer but still uses the old timer value the first time around. If the timer was disabled, by setting the interval to 0, it was not enabled again. We now check if the interval has changed beforehand and potentially arm the scan timer afterwards. Fixes #5178. --- repos/dde_linux/src/drivers/wifi/frontend.h | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/repos/dde_linux/src/drivers/wifi/frontend.h b/repos/dde_linux/src/drivers/wifi/frontend.h index d296e01124..e1f87b47d4 100644 --- a/repos/dde_linux/src/drivers/wifi/frontend.h +++ b/repos/dde_linux/src/drivers/wifi/frontend.h @@ -386,24 +386,32 @@ struct Wifi::Frontend : Wifi::Rfkill_notification_handler _verbose = config.attribute_value("verbose", _verbose); _verbose_state = config.attribute_value("verbose_state", _verbose_state); - Genode::uint64_t connected_scan_interval = + Genode::uint64_t const connected_scan_interval = Util::check_time(config.attribute_value("connected_scan_interval", _connected_scan_interval), 0, 15*60); - Genode::uint64_t scan_interval = + Genode::uint64_t const scan_interval = Util::check_time(config.attribute_value("scan_interval", _scan_interval), 5, 15*60); - if ( connected_scan_interval > _connected_scan_interval - || scan_interval > _scan_interval) { - _arm_scan_timer(_connected_ap.bssid_valid()); - } + bool const new_connected_scan_interval = + connected_scan_interval != _connected_scan_interval; + + bool const new_scan_interval = + connected_scan_interval != _scan_interval; _connected_scan_interval = connected_scan_interval; _scan_interval = scan_interval; + /* + * Arm again if intervals changed, implicitly discards + * an already scheduled timer. + */ + if (new_connected_scan_interval || new_scan_interval) + _arm_scan_timer(_connected_ap.bssid_valid()); + /* * Always handle rfkill, regardless in which state we are currently in. * When we come back from rfkill, will most certainly will be IDLE anyway.